从 PHP 方法中获取方法名称

问题描述 投票:0回答:8

可以做这样的事情吗?

public function something() {
    $thisMethodName = method_get_name(); 
}

其中

method_get_name()
返回方法本身的名称。

php methods oop
8个回答
138
投票

当然,你想要魔法常数。

function myFunction() { print __FUNCTION__." in ".__FILE__." at ".__LINE__."\n"; }

php 手册

了解更多信息

28
投票

虽然您可以使用魔法常量

__METHOD__
,但我强烈建议您查看 PHP 的reflection。 PHP5 支持此功能。

$modelReflector = new ReflectionClass(__CLASS__);
$method = $modelReflector->getMethod(__METHOD__);

然后你可以做一些很棒的事情,比如检查签名等。


14
投票

正如 smartj 建议的那样,您可以尝试使用神奇常量

__METHOD__
,但请记住,这将返回一个还包含您的类名的字符串,即“MyClass::something”。 使用
__FUNCTION__
将会返回“something”。


4
投票

有了

__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'
    ]);
}

并且如果我想更改它,不关心替换方法内部的方法名称。


3
投票

使用

__FUNCTION__
是替代的方法:

 public function something() {
     $thisMethodName = "something";
 }

它在多个方面存在缺陷,添加变量和内存以将方法名称存储为字符串并重复已存在的内容,从而不必要地添加使用的资源(如果您对具有许多方法的大型库执行此操作,则非常重要)。

PHP 中的魔法常量保证不会更改,而如果方法名称发生更改,这种方法将需要进行适当的编辑,从而引入潜在的不一致(注意,我确实说过潜在的,意思是简单地说,如果方法名称发生更改,则这是不必要的编辑)改为使用魔法常数)。

命名变量、将方法名称重新输入为分配给该不必要变量的字符串以及正确引用变量名称的时间和精力,这就是 PHP 提供魔术常量的动机(并反驳任何声明)

__FUNCTION__
是不必要的)。


3
投票

也许以这种方式丢失了后期绑定。

B类扩展A类时:

__METHOD__
始终返回引用 A 的“className::”部分 (
A::methodName
)

解决方案是:

static::class."::".__FUNCTION__

这样你就获得了当前工人阶级的阶级参考(

B::methodName
)


1
投票

Hackish,但你也可以从 debug_backtrace() 返回值中挖掘它。


-7
投票

为什么你不能这样做?

public function something() {
    $thisMethodName = "something";
}
© www.soinside.com 2019 - 2024. All rights reserved.