2009-12-27 12 views
31

Myślę o użyciu funkcji set_error_handler() w PHP do obsługi większości błędów PHP w jednym miejscu (rejestrowanie ich w pliku). Z dokumentacji wynika, że ​​mogę przekazać nazwę funkcji do set_error_handler(). Miły! Ale mam obiekt ErrorManager, który ma dobrą metodę rejestrowania. Chcę użyć tego obiektu ErrorManager i napisać dla niego specjalną procedurę obsługi błędów i wywołać funkcję set_error_handler, która wywołuje ErrorManager.Jak mogę wywołać metodę set_error_handler() dla metody na obiekcie?

może po prostu zrobić coś takiego

set_error_handler($this->customErrorHandler); 

? A może byłoby to nieważne?

+1

Z ręczny wpis dla set_error_handler() (http://php.net/manual/en/function.set-error-handler.php): "... tablicę zawierającą odniesienie do obiektu i nazwę metody można również podać jako error_handler. " – GZipp

Odpowiedz

50

przejścia w tablicy obiektu i kod metody zwane:

set_error_handler(array($this, 'customErrorHandler')); 

set_error_handler() wykonuje callback: User

Niektóre funkcje, takie jak call_user_func() lub usort() przyjmuje -definiowane funkcje oddzwaniania jako parametr. Funkcje oddzwaniania to nie tylko proste funkcje, ale także metody obiektu , w tym metody klasy statycznej .

Funkcja PHP jest przekazywana jako jej nazwa jako ciąg. Dowolna wbudowana lub zdefiniowana przez użytkownika funkcja może być użyta, , z wyjątkiem konstrukcji językowych, takich jak: array(), echo(), empty(), eval(), exit(), isset(), list() , print() lub unset().

sposób obsługi instancja obiektu jest przekazywane jako matrycy zawierającej obiekt o indeksie 0 i nazwę metody o indeksie 1

statyczne metody klas mogą być również przekazywane bez uruchamianiu obiektu tej klasy przepuszczając klasę nazwa zamiast obiektu o indeksie 0

Oprócz zwykłego użytkownika zdefiniowane funkcji, create_function() może również służy do tworzenia anonimowej funkcji oddzwaniania . Od wersji PHP 5.3.0 można również przekazać zamknięcie parametrowi zwrotnemu.

(nacisk dodano)

4

set_error_handler przyjmuje wartości callback jako parametru.

Cytowanie tej strony:

sposób obsługi instancja obiektu jest przekazywane jako matrycy zawierającej obiekt o indeksie 0 i nazwę metody o indeksie 1.


W twoim przypadku, chcesz zwrotnego odpowiadający metodzie (nazywany 'customErrorHandler') obiektu (tutaj $this); callback będzie wówczas:

array($this, 'customErrorHandler') 

Tak, można użyć tego fragmentu kodu:

set_error_handler(array($this, 'customErrorHandler')); 
6

W PHP 5.3 można zrobić go w zamknięciu:

$that = $this; 
set_error_handler(function() use ($that) { $that->customErrorHandler(); }); 
+0

wydaje się logiczne – streetparade

+1

'$ this' jest niedostępne w zamknięciach w 5.3, czyż nie? – neoascetic

+1

prawda, musisz utworzyć dla niego dodatkową zmienną. Odpowiednio zaktualizowałem kod ... – selfawaresoup

Powiązane problemy