bob*_*cow 4 php inheritance late-static-binding php-5.3
我正在寻找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;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
在其他一些文件中,在其他一些文件夹中......
<?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.
?>
Run Code Online (Sandbox Code Playgroud)
现在,我可以做一些贫民窟,比如增加$this->baseDir = dirname(__FILE__)每一个扩展课程,但这似乎有点......贫民窟.毕竟,我们谈论的是PHP 5.3,对吧?这不应该是未来吗?
是否有另一种方法来获取声明类的文件的路径?
如果您不使用__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();
Run Code Online (Sandbox Code Playgroud)
您仍然需要重新声明每个类中的属性,但不需要重新声明方法
| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |