【问题标题】:Get Name of Most Recent Class Declaration?获取最新类声明的名称?
【发布时间】:2011-11-21 05:50:05
【问题描述】:

我知道这可能是一个很长的尝试,但我希望这是可能的。在我正在开发的项目中,这并不是真正的绊脚石(尽管它确实有帮助),但我很好奇。

我想获取最近声明的类的名称。基本上,我有一段代码需要在包含某些(不是全部)类声明的某些文件之后附加。这段代码在重复,除了在其中启动的类。

我尝试过get_declared_classes(),但数组是按字母顺序排序的,而不是按照声明类的顺序。

这是我想要实现的示例代码:

class MyClass{

}

//Repeating code:

if(isset($_REQUEST['fxn'])){

    $class = new MyClass(); //I am hoping to make the class name dynamic, according to the most recent declared class...

    //More repeating codes here...
}

(如果我可以使用include 将这段代码附加到任何需要的地方,这将在开发期间和将来节省大量时间。因此是我的问题。)

【问题讨论】:

  • 这是……一件很奇怪的事情。我无法想象你为什么想要这个。如果您正在动态加载包含基于某个变量的类定义的文件,那么如果您使用 any 类型,则应该知道基于文件名的类的名称(反之亦然)合理的命名方案。
  • 是的,我知道。我已经为我的具体问题找到了解决方案(steveo255 也发布了...),但正如我在问题中所说,我提出这个问题是出于对可能与否的好奇。谢谢。 (另外,不幸的是,我正在做的事情没有合理的命名方案。这是一个缺陷,但在我开始之前就已经如此了,所以目前真的无能为力..)跨度>

标签: php introspection


【解决方案1】:

您可能会抓取get_declared_classes 返回的最后一个元素,但如果您尝试这样做,似乎有些非常非常错误。或许您可以更好地解释您的情况,以便更多地了解实现目标的其他方法。

【讨论】:

  • 你是对的。我的观察是错误的,get_declared_classes 是按字母顺序而不是按时间顺序排序的。谢谢!作为旁注,我已经通过使用 PEAR 风格的命名约定解决了我的问题。我不再需要解决这个问题了,哈哈。但我接受你的回答,因为它解决了提出的问题。 :)
【解决方案2】:

这可能不是您想要的,但它确实有效:

class MyClass {}
$class_name = 'MyClass';

//Repeating code:

if(isset($_REQUEST['fxn'], $class_name)) {
     $class = new $class_name();

    //More repeating codes here...
}

在定义要使用的类时,还要定义一个带有类名的变量。

【讨论】:

  • 这是我目前正在使用的,事实上。 :)
猜你喜欢
  • 2017-05-05
  • 1970-01-01
  • 2016-07-18
  • 2017-06-19
  • 2011-05-31
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多