我正在寻找与get_called_class()
等效的__FILE__
...也许像get_included_file()
一样?
我有一组类,它们想知道它们存在于哪个目录中。类似这样的东西:
<?php
class A {
protected $baseDir;
public function __construct() {
$this->baseDir = dirname(__FILE__);
}
public function getBaseDir() {
return $this->baseDir;
}
}
?>
在其他文件中,在其他文件夹中...
<?php
class B extends A {
// ...
}
class C extends B {
// ...
}
$a = new A;
echo $a->getBaseDir();
$b = new B;
echo $b->getBaseDir();
$c = new C;
echo $c->getBaseDir();
// Annnd... all three return the same base directory.
?>
现在,我可以做一些贫民窟,例如向每个扩展类添加
$this->baseDir = dirname(__FILE__)
,但这似乎有点...贫民窟。毕竟,我们谈论的是PHP 5.3,对吧?这不应该是 future 吗?还有另一种方法来获取声明类的文件的路径吗?
最佳答案
如果您不使用__FILE__
而是一个单独的变量,然后在每个类中将变量设置为__FILE__
怎么办
class A {
protected static $baseDir;
protected $filename = __FILE__; // put this in every file
public function __construct() {
}
public function getBaseDir() {
return dirname($this->filename) . '<br>'; // use $filename instead of __FILE__
}
}
require('bdir/b.php');
require('cdir/c.php');
class B extends A {
protected $filename = __FILE__; // put this in every file
}
$a = new A;
echo $a->getBaseDir();
$b = new B;
echo $b->getBaseDir();
$c = new C;
echo $c->getBaseDir();
您仍然必须在每个类中重新声明属性,但不必重新声明方法
关于php - 忘记后期静态绑定(bind),我需要后期静态__FILE__,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2718820/