Тернарный оператор в php работает необычно. Пример из документации.
1 |
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2 |
С одной стороны это потенциальный источник ошибок о котором стоит помнить. С другой стороны это удобный эквивалент конструкции switch.
1 2 3 4 |
$s = $i==1 ? "i equal 1" : $i==2 ? "i equal 2" : $i==5 ? "i equal 5" : "default value"; |
И еще один забавный трюк связан с обработкой неотлавливаемых "фатальных" ошибок. Из документации "The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called". Т.е. этот тип ошибок нельзя отловить обычным путем. Но есть обходной путь.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
set_error_handler('myErrorHandler'); register_shutdown_function('fatalErrorShutdownHandler'); function myErrorHandler($code, $message, $file, $line) { ... } function fatalErrorShutdownHandler() { $last_error = error_get_last(); if ($last_error['type'] === E_ERROR) { // fatal error myErrorHandler(E_ERROR, $last_error['message'], $last_error['file'], $last_error['line']); } } |
Свежие комментарии