Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   опечатка в php -разные результаты (http://forum.oszone.net/showthread.php?t=350701)

Опиум 14-02-2022 10:15 2979988

опечатка в php -разные результаты
 
PHP код:

<?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 2980011

Цитата:

Цитата Опиум
$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.

Цитата:

Цитата Опиум
Почему так? »

Если подойти к данному вопросу семантически, то...
PHP код:

$t=$time(); 

...пытается присвоить переменной $t значение результата выполнения некоей функции, название которой записано в переменную $time — это вполне законно:
PHP код:

$test 'strtoupper';
echo 
$test('foobar'); // FOOBAR 

Здесь же:
PHP код:

$time()=5

Значение 5 пытаются задать не переменной, а результату выполнения некоей функции, название которой записано в переменную $time. Что явно не нравится интерпретатору PHP :)

Опиум 14-02-2022 15:54 2980019

Habetdin, спасибо большое.


Время: 02:43.

Время: 02:43.
© OSzone.net 2001-