wake-up-neo.com

Können Sie aus einer Methode in PHP einen Methodennamen erhalten?

Kann man so etwas tun?

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

Wo gibt method_get_name() den Namen der Methode zurück?

58
alex

Sicher, du willst die magischen Konstanten.

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

Erfahren Sie mehr aus dem PHP-Handbuch

98
Kevin Vaughan

Während Sie die magic-Konstante__METHOD__ verwenden können, würde ich wärmstens empfehlen, PHP's reflection auszuprobieren. Dies wird in PHP5 unterstützt.

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

Sie können dann Kick-Ass-Sachen machen, wie zB die Signatur prüfen usw.

20
thesmart

Wie von smartj vorgeschlagen, können Sie die magische Konstante __METHOD__ ausprobieren. Denken Sie jedoch daran, dass dies eine Zeichenfolge mit Ihrem Klassennamen zurückgibt, d. Wenn Sie stattdessen __FUNCTION__ verwenden, wird 'etwas' zurückgegeben.

11
Jan Molak

Verwenden Sie __FUNCTION__, anstatt zu gehen:

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

dies ist auf verschiedene Weise fehlerhaft, indem eine Variable und ein Speicher hinzugefügt wird, um den Methodennamen als Zeichenfolge zu speichern und das bereits vorhandene zu duplizieren, wodurch unnötig Ressourcen hinzugefügt werden (wenn Sie dies für eine große Bibliothek mit vielen Methoden tun, ist dies von großer Bedeutung).

Es ist garantiert, dass sich die magischen Konstanten in PHP nicht ändern, während dieser Ansatz bei einer Änderung des Methodennamens eine entsprechende Bearbeitung erfordern würde, was zu einer Inkonsistenz führen könnte (Hinweis, ich habe möglicherweise gesagt, das heißt, es ist ansonsten unnötig bearbeiten, wenn stattdessen die magische Konstante verwendet wurde).

Wenn Sie eine Variable benennen möchten, geben Sie den Methodennamen erneut als Zeichenfolge ein, die dieser nicht benötigten Variablen zugewiesen ist, und verweisen natürlich ordnungsgemäß auf den Variablennamen. Dies ist die Motivation für PHP, die zunächst magische Konstanten (und) liefert Ablehnung jeglicher Ansprüche __FUNCTION__ ist nicht erforderlich).

2

Hackish, aber du könntest es wahrscheinlich auch aus dem debug_backtrace () - Rückgabewert herausholen.

1
timdev

Mit __FUNCTION__ kann ich folgendes verwenden:

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 ich kümmere mich nicht darum, 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__ gibt immer den "className ::" - Teil zurück, der auf A verweist (A::methodName)

Lösung ist:

static::class."::".__FUNCTION__

Auf diese Weise erhalten Sie den Klassenverweis auf die aktuelle Arbeiterklasse (B::methodName)

0
sdotbertoli