是否可以做这样的事情?
public function something() {
$thisMethodName = method_get_name();
}
当method_get_name()
返回方法的名字?
Answers:
使用__FUNCTION__
方法可以代替:
public function something() {
$thisMethodName = "something";
}
这在几种方面都存在缺陷,即添加变量和内存以将方法名称存储为字符串并复制已存在的内容,从而不必要地增加了使用的资源(如果您对具有许多方法的大型库执行此操作,则非常重要)。
保证PHP中的魔术常数不会更改,而如果更改了方法名,则此方法将需要进行适当的编辑,从而引入了潜在的不一致(请注意,我确实有可能说过,这意味着如果魔术有效,则这是不必要的编辑常量代替)。
费时费力地命名变量,将方法名称重新输入为分配给该不必要变量的字符串,并且当然正确引用了变量名称,这是PHP提供魔术常数的动机(并且反驳了任何主张__FUNCTION__
是不必要)。
随着__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'
]);
}
而且,如果要更改它,则不必关心在方法内部替换该方法的名称。
你为什么不能这样做?
public function something() {
$thisMethodName = "something";
}
__FUNCTION__
可用时完全不需要。
__METHOD__