Ist es möglich so etwas zu tun?
public function something() {
$thisMethodName = method_get_name();
}
Woher method_get_name()
kommt der Name der Methode?
Antworten:
Klar, du willst die magischen Konstanten.
function myFunction() { print __FUNCTION__." in ".__FILE__." at ".__LINE__."\n"; }
Weitere Informationen finden Sie im PHP-Handbuch
__METHOD__
tatsächlich Class::method
so __FUNCTION__
spezifisch nur der Methodenname zurückgegeben wird ... für alle anderen, die RTFM immer noch nicht mögen wie ich.
Während Sie die magische Konstante verwenden können, __METHOD__
würde ich dringend empfehlen, die Reflexion von PHP zu überprüfen . Dies wird in PHP5 unterstützt.
$modelReflector = new ReflectionClass(__CLASS__);
$method = $modelReflector->getMethod(__METHOD__);
Sie können dann verdammt gute Sachen machen, wie die Unterschrift inspizieren usw.
Wie von smartj vorgeschlagen, können Sie die magische Konstante ausprobieren __METHOD__
, aber denken Sie daran, dass dies eine Zeichenfolge zurückgibt, die auch Ihren Klassennamen enthält, dh 'MyClass :: Something'. Wenn Sie __FUNCTION__
stattdessen verwenden, wird "etwas" zurückgegeben.
Verwenden __FUNCTION__
ist der richtige Weg, anstatt:
public function something() {
$thisMethodName = "something";
}
Dies ist in mehrfacher Hinsicht fehlerhaft, wenn eine Variable und ein Speicher hinzugefügt werden, um den Methodennamen als Zeichenfolge zu speichern und die bereits vorhandenen zu duplizieren, wodurch unnötigerweise verwendete Ressourcen hinzugefügt werden (wenn Sie dies für eine große Bibliothek mit vielen Methoden tun, ist dies von großer Bedeutung).
Es wird garantiert, dass sich die magischen Konstanten in PHP nicht ändern, während dieser Ansatz eine entsprechende Bearbeitung erfordern würde, wenn der Methodenname geändert würde, wodurch das Potenzial für eine Inkonsistenz entsteht (Anmerkung, ich habe möglicherweise gesagt, was bedeutet, dass es sich einfach um eine ansonsten unnötige Bearbeitung handelt, wenn die Magie Konstante wurden stattdessen verwendet).
Die Zeit und Mühe , um eine Variable zu benennen, geben Sie den Namen der Methode als String zu dieser unnötigen Variablen zugewiesen und natürlich richtig den Variablennamen referenzieren, die die Motivation für PHP liefert magische Konstanten ist mit zu beginnen (und Widerlegung jeder Anspruch __FUNCTION__
ist nicht notwendig).
Mit __FUNCTION__
kann ich das benutzen:
protected static function getUserResponseByAccessTokenRequestOptions(string $myParam): array
{
return array_merge(parent::{__FUNCTION__}($myParam), [
'myValue' => '123'
]);
}
an Stelle von:
protected static function getUserResponseByAccessTokenRequestOptions(string $myParam): array
{
return array_merge(parent::getUserResponseByAccessTokenRequestOptions($myParam), [
'myValue' => '123'
]);
}
Und es ist mir egal, den Namen der Methode innerhalb der Methode zu ersetzen, wenn ich sie ändern möchte.
Vielleicht fehlen auf diese Weise späte Bindungen.
wenn Klasse B Klasse A erweitert:
__METHOD__
Geben Sie immer den Teil "className ::" zurück, auf den A ( A::methodName
) verweist.
Lösung ist:
static::class."::".__FUNCTION__
Auf diese Weise erhalten Sie den Klassenverweis auf die aktuelle Arbeiterklasse ( B::methodName
)
Warum kannst du das nicht tun?
public function something() {
$thisMethodName = "something";
}
__FUNCTION__
verfügbar.
__METHOD__