2010-01-26 13 views
43

im tworzenie funkcji dziennika, która będzie rejestrować moje błędy w pliku.uzyskać aktualną klasę i metodę?

myślałem, będzie on zawierał która klasa i metoda wystąpił błąd w.

czy istnieje sposób rejestrowania w której klasy i metody pojawienia się błędu w więc nie trzeba go wpisać ręcznie za każdym razem?

+0

Możesz chcieć dostarczyć więcej informacji o swojej klasie rejestratora i jak masz zamiar to nazwać. – Gordon

Odpowiedz

65

Nie jestem duży w PHP, ale uważam, że ma "magiczne stałe" podobne do C/C++. Spójrz here: To wydaje się wskazywać, można użyć

__LINE__, __FILE__, __FUNCTION__, __CLASS__, and __METHOD__ 
+1

Jeśli zostanie wywołana w deklaracji klasy macierzystej funkcji, to zwraca rodzica, a nie rozszerzoną klasę – paullb

+1

Tutaj można znaleźć wszystkie predefiniowane stałe: http://php.net/manual/en/language.constants.predefined. php – Ramazan

5

użyć stałej __METHOD__ w PHP5

35

W przypadku jesteś w klasie rodzic/bazowej __CLASS__ zwróci nazwę klasy rodzic/bazową, która nie jest pożądane. W takim przypadku można użyć get_class():

get_class($this) 
+4

To nie zadziała w środowisku statycznym! –

+0

Otrzymuje to klasę potomną, nawet jeśli znajdujesz się w metodzie zdefiniowanej w obiekcie nadrzędnym. – paullb

3

w aktualnej wersji PHP (5.5+) należy użyć static::class

Działa zarówno w metodach statycznych oraz instancji i zwraca rzeczywistą nazwę klasy, nawet jeśli metoda ciało zostało zdefiniowane w superklasie.

+0

W PHP 7.1, jeśli treść metody została zdefiniowana w superklasie static :: class zwraca nazwę klasy nadrzędnej – g4b0

+0

@ g4b0 nie, tak nie jest. Właśnie przetestowałem ten skrypt w PHP 7.1.8: 'class A {function f() {return static :: class;}} klasa B rozszerza A {} $ b = new B; echo $ b-> f(); 'i poprawnie drukuje B, nawet jeśli metoda została zdefiniowana w A. – Tobia

+0

Nie zapomnij o różnicy między' self' i 'static'. 'static' będzie odnosić się do klasy, do której się odwołuje, podczas gdy' self' jest klasą, w której został utworzony. – skerit

1

W Laravel 5 KLASA zwracała przestrzeń nazw i klas, więc był to duży ciąg. Tak to jest jak się dostać bieżącej klasy bez całej tej drugiej rzeczy:

echo (new \ReflectionClass($this))->getShortName(); 
Powiązane problemy