Mam następujący fragment kodu:Dlaczego w pierwszym wywołaniu nie ma błędu E_NOTICE?
error_reporting(E_ALL | E_STRICT);
function &getVal() {
$data = [];
return $data['hey'];
//return $whatever;
}
function getVal2() {
$data = [];
return $data['hey'];
}
var_dump(getVal()); // No E_NOTICE error is issued - why?
var_dump(getVal2()); // E_NOTICE error is issued.
A pytanie brzmi: Dlaczego nie ma E_NOTICE
błąd w pierwszym zaproszeniu? Wyjaśnienie jest najbardziej prawdopodobne, że zmienna $data['hey']
została utworzona w celu zwrócenia referencji. Jednak nadal wydaje się błędem nie wydawanie błędu E_NOTICE, gdy $data['hey']
(lub $whatever
, ...
) nie jest zdefiniowany.
Sam odpowiedziałeś na to pytanie. Co do "wydaje się nie tak" ... to jest PHP, prawda? – Jon
Cóż, jesteś absolutnie poprawny. Problem polega na tym, że utworzyło to poprzez zwykłe działanie polegające na odwoływaniu się do niego. Prawdopodobnie ma to związek z tym, jak referencje są obsługiwane pod maską, jak na przykład wywoływanie 'preg_match ('..', '..', $ match);' oczywiście nie będzie również narzekać na '$ match' nieistniejące jednak, jak punkt to wypełnia. Zobacz _return przez reference_ jako "Chcę, abyś uzyskał dostęp do danych i zmień dane w tej lokalizacji". To, że odrzucasz tę zmienną po powrocie, gdy zamyka się lunetę, jest poza punktem. Nie mówię, że to bardzo ładne, ale tak właśnie jest. – Wrikken