我不太确定如何制定我的问题,所以提前抱歉这个无信息的标题 所以这就是问题所在。我在同一目录中有几个文件,每个文件都是一个类持有者。当我继承我需要知道的哪个类在哪个文件(或更像文件夹)时,我会这样做 我真的不喜欢我遇到的解决方案,但仍然要证明我的意思。
foo.php
class Foo {
}
bar.php
include_once 'bootstrap.php' ;
class Bar extends Foo {
}
$bar = new Bar() ;
bootstrap.php中
function __autoload( $class ) {
$trace = debug_backtrace() ;
// Here i've got the directory i need:
$folder = dirname( $trace[ 0 ][ 'file' ] ) ;
}
是否有其他(正确的)获取文件夹名称的方法,因为它实际上并不适用于此类操作。从性能的角度来看也不好。
限制:应该适用于php 5.2.12
答案 0 :(得分:0)
$folder = dirname(__FILE__)
不能胜任这项工作?
答案 1 :(得分:0)
魔术常量__FILE__
报告调用它的文件的文件名(带路径)(参见PHP docs):
__FILE__
:文件的完整路径和文件名。如果在include中使用,则返回包含文件的名称。从PHP 4.0.2开始,__FILE__
总是包含已解析符号链接的绝对路径,而在旧版本中,它在某些情况下包含相对路径。
这意味着您可以创建一个返回类文件名的方法。
例如,在'test-folder / Foo.php'中:
class Foo {
function getFile() {
return __FILE__;
}
}
在'Bar.php`中:
include 'test-folder/Foo.php';
class Bar extends Foo {
function getParentFile() {
return parent::getFile();
}
}
$bar = new Bar();
echo dirname($bar ->getParentFile());
// result: C:\wamp\www\test-folder
编辑:好的,所以如果你想在创建之前找出父类的位置,这应该有效(使用Reflection):
$reflectedBar = new ReflectionClass('Bar');
$reflectedBarParent = $reflectedBar->getParentClass();
$filename = $reflectedBarParent->getFileName();