我正在寻找与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/

10-09 13:41