Php 从扩展构造获取子类信息
我不太清楚该如何表述我的问题,因此,对于这个缺乏信息的标题,我深表歉意。Php 从扩展构造获取子类信息,php,oop,Php,Oop,我不太清楚该如何表述我的问题,因此,对于这个缺乏信息的标题,我深表歉意。 这就是问题所在。我在同一个目录中有几个文件,每个文件都是类持有者。当我继承其中一个类时,我需要知道我在哪个文件(或更像文件夹)中继承它。 我真的不喜欢我得出的解决方案,但仍然要证明我的确切意思 foo.php class Foo { } bar.php include_once 'bootstrap.php' ; class Bar extends Foo { } $bar = new Bar() ; bootst
这就是问题所在。我在同一个目录中有几个文件,每个文件都是类持有者。当我继承其中一个类时,我需要知道我在哪个文件(或更像文件夹)中继承它。
我真的不喜欢我得出的解决方案,但仍然要证明我的确切意思 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' ] ) ;
}
有没有其他(正确的)方法来获取文件夹名称,因为它实际上并不适用于此类操作。从性能的角度来看也不是很好
限制:应适用于PHP5.2.12
$folder=dirname(\uuuuu FILE\uuuu)
不起作用?魔法常数\uuuu FILE\uuuuuu
报告调用它的文件的文件名(带路径)(请参阅):
\uuuu文件\uuuu
:文件的完整路径和文件名。如果在包含中使用,则返回包含文件的名称。自PHP4.0.2以来,\uuuuuuu FILE\uuuuu
始终包含一个绝对路径,并解析符号链接,而在旧版本中,在某些情况下它包含相对路径
这意味着您可以创建一个返回类文件名的方法
例如,在“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
编辑:好的,因此如果您想在创建父类之前找到它的位置,这应该可以(使用):
不,引导可以位于其他任何地方。我需要确切地知道调用父类的目录否,文件包含当前文件路径。在继承之前不能使用它。因此,我不能在Bar类中使用它。不,如果您在父类中创建一个方法,并使用“parent::getFile()”(或其他)从子类调用该方法,它将报告父文件的位置。我在标题中的错误。这个例子更正确。我不需要父类,我需要的是子类。然后将方法放在子类中?你把我搞糊涂了,这是不可能的。在创建子对象之前,它需要知道它继承了哪个类,对吗?问题到此为止。此外,我需要孩子们更加灵活,这就是为什么我使用AutoLoad这是一个完全可以接受的debug_backtrace()用法。PHP手册页面上充满了人们出于类似目的使用它的例子。请解释您将如何使用找到的目录名。这一切的目的。
$reflectedBar = new ReflectionClass('Bar');
$reflectedBarParent = $reflectedBar->getParentClass();
$filename = $reflectedBarParent->getFileName();