2009-12-23 8 views
11

Podczas korzystania z error_reporting() lub ini_set('error_reporting') w moich skryptach, czy są jakieś różnice w funkcjonalności między nimi? Czy jedna metoda jest lepsza od drugiej?Różnica między error_reporting() a ini_set ('error_reporting')?

Dla tego, co jest warte, widzę wiele frameworków przy użyciu error_reporting(), ale obie opcje wydają się być ustawione tylko podczas wykonywania, a następnie przywracane do wartości domyślnych w php.ini po wykonaniu skryptu.

Odpowiedz

8

Tylko niewielka różnica funkcjonalna wydaje się, że ini_set powraca false gdy był w stanie zmienić ustawienie i error_reporting zawsze zwraca starą poziom błędu.

+3

Niezupełnie; ini_set zwraca wartość false, gdy ustawienie nie istnieje. Oczekuje łańcucha, więc wszystko, co można zinterpretować jako ciąg, zostanie przekonwertowane. Jeśli przekażesz obiekt, na przykład, PHP wygeneruje ostrzeżenie i zwróci wartość null, która jest identyczna z zachowaniem error_reporting, gdy przekazano obiekt (obiekt bez metody __toString(), to jest). Rzecz w tym, że jego pytaniem była różnica między 'ini_set ('error_reporting')' i 'error_reporting()', a nie sposób, w jaki 'ini_set()' obsługuje błędy w nazwach dyrektyw. – Dereleased

+1

Powinienem wyjaśnić, kiedy mówię "oczekuje struny" mam na myśli drugi parametr, wartość ustawionego ustawienia i wszystko inne odnosi się do tego. – Dereleased

+0

@ Wyobraźni, myślę, że zwracanie false ini_set opiera się na możliwości blokowania zmiany niektórych ustawień w środowisku wykonawczym w 'php.ini'.Zakładam więc, że jeśli zmiana poziomu błędu w środowisku uruchomieniowym zostanie wyłączona w php.ini (Nie jestem pewien, czy to możliwe, ale myślę, że tak) ini_set() zwróci wartość 'false', a' error_reporting' will, przynajmniej zgodnie z instrukcją , zawsze zwracaj stary poziom błędu. –

4

Są funkcjonalnie identyczne, ale jeśli korzystasz z IDE, który zna nazwy funkcji PHP, jest to prosty sposób, aby upewnić się, że przypadkiem nie pomylisz nazwy dyrektywy, którą chcesz ustawić.

Od części przykładów na PHP's Manual Entry for error_reporting():

// Same as error_reporting(E_ALL); 
ini_set('error_reporting', E_ALL); 
+1

Bah, moje IDE (Notatnik ++) powoduje, że oba są błędne. Dobry wkład. – Jeff

+1

W ostatnich czasach (czyli od około sześciu lat) użyłem tylko Komodo (90%) i jEdit, a oboje znają te funkcje. – Dereleased

7

"Dwie drogi prowadzące do Rzymu": ini_set ("error_reporting",) zastępuje zestaw parametrów w pliku php.ini. error_reporting() otrzymuje numer poziomu lub identyfikator poziomu

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

Obie opcje obowiązują do momentu zakończenia wykonywania skryptu. Następny użyje ponownie params zdefiniowanych w .ini.

+3

+1, ponieważ nie mogę zaakceptować dwóch odpowiedzi. – Jeff

0

Ponadto, chociaż docs stwierdził, że podpis na error_reporting jest:

int error_reporting ([ int $level ]) 

, to nie jest dokładnie poprawne, ponieważ można ustawić string i odczytać go z powrotem ini_get:

error_reporting('123 hello world'); 

var_dump(ini_get('error_reporting')); 

produkuje:

string(15) "123 hello world" 

Więc error_reporting($x) jest semantycznie równoważne ini_set('error_reporting', $x),

i error_reporting() jest semantycznie równoważne (int)ini_get('error_reporting').