Czy można zrobić coś takiego?Czy można uzyskać nazwę metody z poziomu metody w PHP?
public function something() {
$thisMethodName = method_get_name();
}
Gdzie method_get_name()
zwraca nazwę metody?
Czy można zrobić coś takiego?Czy można uzyskać nazwę metody z poziomu metody w PHP?
public function something() {
$thisMethodName = method_get_name();
}
Gdzie method_get_name()
zwraca nazwę metody?
Oczywiście, chcesz magiczne stałe.
function myFunction() { print __FUNCTION__." in ".__FILE__." at ".__LINE__."\n"; }
Dowiedz się więcej z the php manual
Dlaczego nie możesz tego zrobić?
public function something() {
$thisMethodName = "something";
}
Całkowicie niepotrzebne, gdy dostępne jest '__FUNCTION__'. –
Wystarczająco uczciwe - ale w tym samym duchu mógłbym zadowolić się tym, że '__FUNCTION__ jest niepotrzebny :) –
Niebezpieczne, jeśli metoda otrzyma nową nazwę, programista może zapomnieć zaktualizować zawartość var –
hackish, ale można również prawdopodobnie kopać ją z debug_backtrace() zwraca wartość.
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
Kiedy mówisz "sprawdzaj podpis", masz na myśli to? http://www.php.net/manual/en/function.openssl-verify.php –
@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
No dobrze, to w zasadzie Type Hinting http: // stackoverflow.com/questions/2161040/is-method-signature-in-php-a-must-or-should Dzięki! –
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ś".
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).
i po prostu być bezczelnym, magiczna stała dla metody nazwa brzmi: '__METHOD__' – Anthony
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