Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从扩展构造获取子类信息_Php_Oop - Fatal编程技术网

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();