【发布时间】:2013-10-05 02:33:05
【问题描述】:
为了简单起见,我注意到 PHP 似乎没有提供任何神奇的常量来确定类中特征已更改为什么名称。由于这听起来让我感到困惑,我将举一个例子,因为它相当简单,并且希望它出现在新的 PHP 5.5 中,我看不到这样做的方法。所以这里是:
假设我们有一个类,它使用了一些与类中的某些函数冲突的特征,例如:
class SomeClass {
use \Name\Space\SomeTrait { SomeFunction as private NewFunctionName; }
function SomeFunction() {
$this->NewFunctionName();
}
}
因为,显然这个类有“SomeFunction”函数,而且我们知道在 SomeTrait 中我们包含了一个函数,该函数在名称上与我们在这个类中的函数匹配。现在,由于“SomeFunction”通过 \Name\Space 内部的特征进入这个类,这两个函数做了 2 件不同的事情,但碰巧使用相同的名称,并且在另一个函数内部或字面上是我们的“SomeFunction” ,然后我们使用 trait 中的“SomeFunction”,通过“NewFunctionName”调用它。
所以希望我没有在这里失去任何人,因为这是我在上述情况下的问题。在 \Name\Space\SomeTrait\SomeFunction() 中,如何获得也分配了此 trait 函数的“NewFunctionName”?人们会想到使用一种神奇的方法,例如 __FUNCTION__,或 __METHOD__,甚至__TRAIT__,除了这些都没有给出预期的结果,所以有没有人知道一种方法来获取这些信息而不将其作为参数传递给函数并导致哈克代码?也许 PHP 5.6 需要添加一个新的 Magic Constant __AS__,或者调整 __TRAIT__ 的结果,我不明白为什么 __TRAIT__ 和 __FUNCTION_ 需要返回相同的信息(或几乎相同的信息)。任何帮助都会很棒,如果它是一种非常规的hacky方法,我有兴趣看到我的选项,直到我可以用php打开一个关于这个的错误报告。 (如果它真的是一个错误)
编辑:
我目前的,最不老套的方法似乎是,
debug_backtrace()[0]['function']
虽然它可以工作,但我觉得获得一个简单的字符串需要做很多事情,尤其是如果你经常使用这个函数。 :/
【问题讨论】:
-
你找到答案了吗?我也有同样的问题。
标签: php traits magic-constants