2009-09-15 15 views

Odpowiedz

81

Oczywiście, chcesz magiczne stałe.

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

Dowiedz się więcej z the php manual

+32

i po prostu być bezczelnym, magiczna stała dla metody nazwa brzmi: '__METHOD__' – Anthony

+24

Późno do gry, ale byłem zaskoczony, że' __METHOD__' zwraca 'Class :: method', więc' __FUNCTION__' zwraca tylko nazwę metody ... dla każdego, kto * nadal * nie RTFM jak ja. – Chords

-4

Dlaczego nie możesz tego zrobić?

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

Całkowicie niepotrzebne, gdy dostępne jest '__FUNCTION__'. –

+1

Wystarczająco uczciwe - ale w tym samym duchu mógłbym zadowolić się tym, że '__FUNCTION__ jest niepotrzebny :) –

+4

Niebezpieczne, jeśli metoda otrzyma nową nazwę, programista może zapomnieć zaktualizować zawartość var ​​ –

1

hackish, ale można również prawdopodobnie kopać ją z debug_backtrace() zwraca wartość.

19

Chociaż można użyć magic constant "__METHOD __", zdecydowanie polecam sprawdzenie php za reflection. Jest to obsługiwane w PHP5.

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

Można wtedy zrobić kick ass rzeczy jak sprawdzić podpis itp

+0

Kiedy mówisz "sprawdzaj podpis", masz na myśli to? http://www.php.net/manual/en/function.openssl-verify.php –

+0

@MrMe Nie, podpis metody (nie należy go mylić z sygnaturą uwierzytelniającą) w następujący sposób: http: //en.wikipedia. org/wiki/Type_signature – thesmart

+0

No dobrze, to w zasadzie Type Hinting http: // stackoverflow.com/questions/2161040/is-method-signature-in-php-a-must-or-should Dzięki! –

10

Jak smartj zasugerował można spróbować magia stała __METHOD__, ale należy pamiętać, że to zwróci łańcuch zawierający również swoją nazwę klasy, tj. "MyClass :: something". Użycie numeru __FUNCTION__ spowoduje zwrócenie "czegoś".

2

Korzystanie __FUNCTION__ jest do zrobienia zamiast:

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

który jest wadliwy na kilka sposobów dodawania zmiennej i pamięć do przechowywania nazwę metody jako ciąg i kopiarek, co już istnieje, więc niepotrzebnie dodając zasoby użyte (jeśli zrobisz to dla dużej biblioteki z wieloma metodami, ma to ogromne znaczenie).

Magiczne stałe w PHP gwarantują, że nie ulegną zmianie, podczas gdy takie podejście wymagałoby odpowiedniej edycji, gdyby nazwa metody została zmieniona, co wprowadziłoby możliwość niespójności (uwaga, powiedziałem to potencjalnie, co oznacza po prostu niepotrzebne edytuj, jeśli zamiast tego użyto magicznej stałej).

Czas i wysiłek, aby nazwać zmienną, należy ponownie wpisać nazwę metody jako ciąg przypisany do tej niepotrzebnej zmiennej i oczywiście poprawnie odwoływać się do nazwy zmiennej, co jest motywacją dla PHP dostarczającą magiczne stałe na początku (i obalenie jakiegokolwiek roszczenia __FUNCTION__ jest niepotrzebne).

Powiązane problemy