有可能做这样的事情吗?
public function something() { $thisMethodName = method_get_name(); }
其中method_get_name()返回方法本身的名称。
method_get_name()
k4emjkb11#
当然,你想要魔法常数。
function myFunction() { print __FUNCTION__." in ".__FILE__." at ".__LINE__."\n"; }
了解更多关于the php manual
b91juud32#
虽然你可以使用magic constant__METHOD__,但我强烈建议你看看PHP的reflection。这在PHP5中得到了支持。
__METHOD__
$modelReflector = new ReflectionClass(__CLASS__); $method = $modelReflector->getMethod(__METHOD__);
然后你可以做一些很棒的事情,比如检查签名等。
k3bvogb13#
正如smartj所建议的,你可以尝试使用魔术常量__METHOD__,但要记住,这将返回一个包含类名的字符串,即。'MyClass::something'。使用__FUNCTION__将返回“something”。
__FUNCTION__
j2datikz4#
在__FUNCTION__中,我可以使用:
protected static function getUserResponseByAccessTokenRequestOptions(string $myParam): array { return array_merge(parent::{__FUNCTION__}($myParam), [ 'myValue' => '123' ]); }
而不是这样:
protected static function getUserResponseByAccessTokenRequestOptions(string $myParam): array { return array_merge(parent::getUserResponseByAccessTokenRequestOptions($myParam), [ 'myValue' => '123' ]); }
如果我想改变方法的话,它并不关心替换方法内部的方法名。
suzh9iv85#
使用__FUNCTION__是正确的方法,而不是:
public function something() { $thisMethodName = "something"; }
它在几个方面存在缺陷,添加变量和内存来将方法名存储为字符串,并复制已经存在的内容,因此不必要地增加了使用的资源,(如果您为具有许多方法的大型库这样做,这非常重要)。PHP中的魔术常量保证不会改变,而如果方法名改变了,这种方法需要进行适当的编辑,从而引入了不一致的可能性(注意,我确实说过潜在的,这意味着如果使用魔术常量,这是不必要的编辑)。命名一个变量的时间和精力,重新输入方法名作为一个字符串分配给那个不必要的变量,当然正确地引用变量名,这是PHP提供魔术常量的动机开始(反驳任何声明__FUNCTION__是不必要的)。
qlfbtfca6#
也许是这样错过了后期绑定。当B类扩展A类时:__METHOD__总是返回引用到A(A::methodName)的“className::“部分解决方案是:static::class."::".__FUNCTION__通过这种方式,您可以获得对当前工作类(B::methodName)的类引用。
A::methodName
static::class."::".__FUNCTION__
B::methodName
gcmastyq7#
这是一个小技巧,但您也可以从debug_backtrace()返回值中找到它。
s6fujrry8#
为什么你不能这样做?
8条答案
按热度按时间k4emjkb11#
当然,你想要魔法常数。
了解更多关于the php manual
b91juud32#
虽然你可以使用magic constant
__METHOD__
,但我强烈建议你看看PHP的reflection。这在PHP5中得到了支持。然后你可以做一些很棒的事情,比如检查签名等。
k3bvogb13#
正如smartj所建议的,你可以尝试使用魔术常量
__METHOD__
,但要记住,这将返回一个包含类名的字符串,即。'MyClass::something'。使用__FUNCTION__
将返回“something”。j2datikz4#
在
__FUNCTION__
中,我可以使用:而不是这样:
如果我想改变方法的话,它并不关心替换方法内部的方法名。
suzh9iv85#
使用
__FUNCTION__
是正确的方法,而不是:它在几个方面存在缺陷,添加变量和内存来将方法名存储为字符串,并复制已经存在的内容,因此不必要地增加了使用的资源,(如果您为具有许多方法的大型库这样做,这非常重要)。
PHP中的魔术常量保证不会改变,而如果方法名改变了,这种方法需要进行适当的编辑,从而引入了不一致的可能性(注意,我确实说过潜在的,这意味着如果使用魔术常量,这是不必要的编辑)。
命名一个变量的时间和精力,重新输入方法名作为一个字符串分配给那个不必要的变量,当然正确地引用变量名,这是PHP提供魔术常量的动机开始(反驳任何声明
__FUNCTION__
是不必要的)。qlfbtfca6#
也许是这样错过了后期绑定。
当B类扩展A类时:
__METHOD__
总是返回引用到A(A::methodName
)的“className::“部分解决方案是:
static::class."::".__FUNCTION__
通过这种方式,您可以获得对当前工作类(
B::methodName
)的类引用。gcmastyq7#
这是一个小技巧,但您也可以从debug_backtrace()返回值中找到它。
s6fujrry8#
为什么你不能这样做?