我不太确定如何表达我的问题,所以提前为这个没有提供信息的标题道歉。
这就是问题所在。我在同一个目录中有几个文件,每个文件都是一个类持有者。当我继承一个类时,我需要知道我是在哪个文件(或者更像是文件夹)中这样做的。
我真的不喜欢我得到的解决方案,但仍然要证明我到底是什么意思。
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' ] ) ;
}有没有其他(适当的)方法来获取文件夹名,因为它的debug_backtrace实际上并不意味着这类操作。从性能的角度来看也不是很好。
限制:适用于php 5.2.12
发布于 2011-01-19 04:33:01
$folder = dirname(__FILE__)不能做这个工作吗?
发布于 2011-01-19 04:35:20
神奇常量__FILE__报告调用它的文件的文件名(带路径)(参见PHP docs):
__FILE__:文件的完整路径和文件名。如果在include中使用,则返回包含文件的名称。从PHP4.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();https://stackoverflow.com/questions/4728643
复制相似问题