首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从扩展构造中获取子类信息

问从扩展构造中获取子类信息
EN

Stack Overflow用户
提问于 2011-01-19 04:24:28
回答 2查看 699关注 0票数 0

我不太确定如何表达我的问题,所以提前为这个没有提供信息的标题道歉。

这就是问题所在。我在同一个目录中有几个文件,每个文件都是一个类持有者。当我继承一个类时,我需要知道我是在哪个文件(或者更像是文件夹)中这样做的。

我真的不喜欢我得到的解决方案,但仍然要证明我到底是什么意思。

foo.php

代码语言:javascript
复制
class Foo {
}

bar.php

代码语言:javascript
复制
include_once 'bootstrap.php' ;

class Bar extends Foo {
}

$bar = new Bar() ;

bootstrap.php

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2011-01-19 04:33:01

$folder = dirname(__FILE__)不能做这个工作吗?

票数 0
EN

Stack Overflow用户

发布于 2011-01-19 04:35:20

神奇常量__FILE__报告调用它的文件的文件名(带路径)(参见PHP docs):

__FILE__:文件的完整路径和文件名。如果在include中使用,则返回包含文件的名称。从PHP4.0.2开始,__FILE__总是包含一个解析了符号链接的绝对路径,而在较早的版本中,它在某些情况下包含相对路径。

这意味着您可以创建一个返回类文件名的方法。

例如,在‘test-folder/Foo.php’中:

代码语言:javascript
复制
class Foo {

   function getFile() {
      return __FILE__;
   }

}

在‘Bar.php`’中:

代码语言:javascript
复制
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):

代码语言:javascript
复制
$reflectedBar = new ReflectionClass('Bar');
$reflectedBarParent = $reflectedBar->getParentClass();
$filename = $reflectedBarParent->getFileName();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4728643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档