このようなことをすることは可能ですか?
_public function something() {
$thisMethodName = method_get_name();
}
_
method_get_name()
はメソッドの名前を返しますか?
確かに、魔法の定数が必要です。
function myFunction() { print __FUNCTION__." in ".__FILE__." at ".__LINE__."\n"; }
PHPマニュアル から詳細をご覧ください。
魔法の定数__METHOD__
PHPの reflection をチェックすることを強くお勧めします。これはPHP5でサポートされています。
$modelReflector = new ReflectionClass(__CLASS__);
$method = $modelReflector->getMethod(__METHOD__);
次に、署名の検査などのキックを行うことができます。
Smartjが示唆したように、マジック定数__METHOD__
を試すことができますが、これはクラス名も含む文字列、つまり 'MyClass :: something'を返すことに注意してください。代わりに__FUNCTION__
を使用すると、「何か」が返されます。
代わりに___FUNCTION__
_を使用する方法です。
_ public function something() {
$thisMethodName = "something";
}
_
これにはいくつかの方法で欠陥があり、変数とメモリを追加してメソッド名を文字列として保存し、既存のものを複製するため、使用されるリソースを不必要に追加します(これを多くのメソッドを持つ大きなライブラリで行う場合、それは非常に重要です)。
PHPのマジック定数は変更されないことが保証されていますが、このアプローチでは、メソッド名が変更された場合、適切な編集が必要になるため、矛盾の可能性が生じます(注意、単にマジック定数が代わりに使用された場合は、それ以外の場合は不要な編集です)。
変数に名前を付け、その不要な変数に割り当てられた文字列としてメソッド名を再入力し、もちろん変数名を適切に参照する時間と労力、これはPHPマジック定数を提供するはじめに(および___FUNCTION__
_のクレームに反論する必要はありません)。
ハックしますが、おそらくdebug_backtrace()戻り値からそれを掘り下げることもできます。
__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'
]);
}
そして、私がそれを変更したい場合、メソッド内のメソッドの名前を置き換えることを気にしません。
おそらくこの方法で遅延バインディングが欠落している可能性があります。
クラスBがクラスAを拡張する場合:
__METHOD__
は常にAを参照する「className ::」部分を返します(A::methodName
)
解決策は次のとおりです。
static::class."::".__FUNCTION__
このようにして、現在の作業クラス(B::methodName
)