theIggs
Новичок
Не работает E_STRICT в PHP 5.1.6?
Возникла интересная проблемка. Согласно всяческим мануалам, в PHP 5 появился новый уровень ошибок, E_STRICT, который призван давать разработчику всякие полезные советы по написанию максимально грамотного и совместимого кода, например:
А дело вот в чём. Захотел я насладиться прелестями новой фичи и написал следующий тестовый скрипт:
Здесь сразу несколько мест, где должен срабатывать E_STRICT, но ни одной такой ошибки не выводится. В результате работы получаем
Внимание, вопрос: в чём я заблуждаюсь? У кого-то с нормально установленным PHP (не Денвером) E_STRICT работает нормально? А может, даже работает у кого-то с Денвером??
Возникла интересная проблемка. Согласно всяческим мануалам, в PHP 5 появился новый уровень ошибок, E_STRICT, который призван давать разработчику всякие полезные советы по написанию максимально грамотного и совместимого кода, например:
Я использую Денвер (www.denwer.ru) последней версии (Base_PHP5_2006-10-04_a1.3.33_p5.1.6_m4.1.16_pma2.6.1.exe) и подозреваю пока только его...Not using var for member variables but moving to PPP.
Not using is_a but using instanceof.
Incorrect usage of references.
When different case used for calling defined functions/methods.
When objects are passed to functions intended for arrays.
Using a deprecated function or syntax.
Accessing a character in a string with the square [] braces instead of the {} curly ones.
А дело вот в чём. Захотел я насладиться прелестями новой фичи и написал следующий тестовый скрипт:
PHP:
<?php
echo '<pre>';
echo phpversion().PHP_EOL;
error_reporting(E_ALL | E_STRICT);
class Test
{
var $a = 1;
function Test($a = 0)
{
$this->a = $a;
}
function __toString()
{
return (string)$this->a;
}
}
$t = new Test(456);
$a = $t->__toString();
var_dump($a);
echo $a{1};
echo $b;
echo '</pre>';
?>
E_NOTICE отрабатывает, а E_STRICT идёт лесом. Прочитал, что ошибки типа E_STRICT возникают на этапе компиляции кода, а не на этапе выполнения. Ладно, внёс соответствующее значение error_reporting в php.ini:5.1.6
string(3) "456"
5
Notice: Undefined variable: b in z:\home\localhost\www\zend\errors.php on line 30
В phpinfo() имеем:error_reporting = E_ALL | E_STRICT
Т. е. E_STRICT вроде как включён, да только не видно этого в реальности.display_errors On On
display_startup_errors Off Off
error_append_string no value no value
error_log no value no value
error_prepend_string no value no value
error_reporting 4095 4095
Внимание, вопрос: в чём я заблуждаюсь? У кого-то с нормально установленным PHP (не Денвером) E_STRICT работает нормально? А может, даже работает у кого-то с Денвером??


