【问题标题】:Resolve a filename from another file从另一个文件解析文件名
【发布时间】:2008-10-14 18:29:55
【问题描述】:

我目前可以做到以下几点:

class SubClass extends SuperClass {
  function __construct() {
    parent::__construct();
  }
}

class SuperClass {
  function __construct() {
    // this echoes "I'm SubClass and I'm extending SuperClass"
    echo 'I\'m '.get_class($this).' and I\'m extending '.__CLASS__;
  }
}

我想对文件名做类似的事情(__FILE__,但动态评估);我想从超类中知道子类所在的文件。有没有可能以任何优雅的方式?

我知道你可以用 get_included_files() 做点什么,但这不是很有效,尤其是在我有很多实例的情况下。

【问题讨论】:

    标签: php file class-design


    【解决方案1】:

    您可以使用反射。

    $ref = new ReflectionObject($this);
    $ref->getFileName(); // return the file where the object's class was declared
    

    【讨论】:

      【解决方案2】:

      呃,不是真的,我能想到的。每个子类都需要有一个显式实现的返回__FILE__ 的方法,这从一开始就完全破坏了继承点。

      我也很好奇为什么这样的东西会有用。

      【讨论】:

      • 我正在创建一个框架,该框架应该能够区分两个具有相同名称的类,并为它们提供唯一且一致的标识符。目前,我正在执行 pass-the-FILE-trick,并从路径构造所述标识符。命名空间可能会有所帮助,但它们对于我的需求来说有点太新了。
      • 现在我真的很困惑。两个同名的类?您不会收到“无法重新声明类”错误吗?或者您是否真的计划对每个文件进行元编程?
      • 从 PHP 的角度来看,它们通常不会同时声明,因为它们会在不同的模块中,但在同一个应用程序中。这不是一个正常的情况(可能是糟糕的设计),但我希望它得到支持(因为第 3 方的东西——想想 CakePHP 的面包店)。
      猜你喜欢
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2012-05-11
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多