Войти

Показать полную графическую версию : опечатка в php -разные результаты


Опиум
14-02-2022, 10:15
<?php
function customError($errno, $errstr) {
echo "<b>Ошибка:</b> [$errno] $errstr";
}
//установить обработчик ошибок
set_error_handler("customError");
$t=time();
print '['.date('G:i:s',$t).']<br>';
//$time()=5; //HTTP ERROR 500
$t=$time(); //Ошибка: [8] Undefined variable: time
echo 'done';
?>

в вышеуказанном скрипте опечатка -лишний $ перед функцией time()
Но одна строка порождает глухое зависание скрипта ( HTTP ERROR 500)
А другая - штатно отлавливается обработчиком ошибок (Ошибка: [8] Undefined variable: time)

Почему так?

Habetdin
14-02-2022, 14:43
$time()=5; //HTTP ERROR 500 »
В данной строке будет вызвана следующая фатальная ошибка:
Fatal error: Can't use function return value in write context in ...
Фатальные ошибки на этапе выполнения кода (runtime) можно отловить с помощью своего обработчика в register_shutdown_function.
Но в данном случае ошибка будет выявлена ещё на этапе разбора кода — такой трюк не сработает. О таких ошибках можно получить информацию в логе службы php — веб-сервер же не получил от неё вменяемого ответа, поэтому и отправил в ответ HTTP ERROR 500.
[hr]Почему так? »
Если подойти к данному вопросу семантически, то...
$t=$time();
...пытается присвоить переменной $t значение результата выполнения некоей функции, название которой записано в переменную $time — это вполне законно:
$test = 'strtoupper';
echo $test('foobar'); // FOOBAR
Здесь же:
$time()=5;
Значение 5 пытаются задать не переменной, а результату выполнения некоей функции, название которой записано в переменную $time. Что явно не нравится интерпретатору PHP :)

Опиум
14-02-2022, 15:54
Habetdin, спасибо большое.




© OSzone.net 2001-2012