Miałem świetny pomysł użycia niestandardowego programu obsługi błędów, który doprowadził mnie do króliczej nory.Tylko zmienne mogą być przekazywane przez odniesienie
następujący kod daje (z lub bez niestandardowej obsługi błędów): Fatal error: Tylko zmienne mogą być przekazywane przez referencję
function foo(){
$b=array_pop(array("a","b","c"));
return $b;
}
print_r(foo());
następujący kod daje (tylko z niestandardowych obsługi błędów): (2048) Tylko zmienne powinny być przekazywane przez referencję
function foo(){
$a=explode('/' , 'a/b/c');
$c=array_pop(array_slice($a,-2,1));
return $c;
}
print_r(foo());
drugi martwi mnie, ponieważ mam dużo "zwartego" kodu. Tak więc, albo rezygnuję z idei używania niestandardowej procedury obsługi błędów (w celu ulepszenia modułu logowania) lub rozszerzenia całego mojego kodu.
Ktoś ma lepsze pomysły? Również WTF?
UPDATE:
Dzięki odpowiedzi nauczyłem się czegoś o tym, jak PHP czy obsługę błędów. Zamieszanie E_ALL, nie włączając E_STRICT (php 5), nie jest fajne.
Co więcej, tworzenie własnych niestandardowych procedur obsługi błędów umożliwia domyślnie E_STRICT i tam, gdzie zaczynają się problemy.
Morał z tej historii polega na użyciu własnego programu do obsługi błędów, aby złapać je ALL i użyć stałych błędu (E_STRICT, E_USER_WARNING, E_USER_ERROR itd.) Do wykonania filtrowania.
Co mam powiedzieć na temat "problemu z korupcją pamięci" ze zmiennymi referencjami i określonymi funkcjami? Podwójnie bez płynu. Będę (co nie znaczy, że powinieneś) ignorować E_STRICT w moim programie obsługi błędów, a życie toczy się dalej.
$ b = current (array_reverse (array ("a", "b", "c"))); // tak, to głupie, ale działa :) – MSpreij