Не работает E_STRICT в PHP 5.1.6?

Статус
В этой теме нельзя размещать новые ответы.

theIggs

Новичок
Не работает E_STRICT в PHP 5.1.6?

Возникла интересная проблемка. Согласно всяческим мануалам, в PHP 5 появился новый уровень ошибок, E_STRICT, который призван давать разработчику всякие полезные советы по написанию максимально грамотного и совместимого кода, например:
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.
Я использую Денвер (www.denwer.ru) последней версии (Base_PHP5_2006-10-04_a1.3.33_p5.1.6_m4.1.16_pma2.6.1.exe) и подозреваю пока только его...

А дело вот в чём. Захотел я насладиться прелестями новой фичи и написал следующий тестовый скрипт:
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_STRICT, но ни одной такой ошибки не выводится. В результате работы получаем
5.1.6
string(3) "456"
5
Notice: Undefined variable: b in z:\home\localhost\www\zend\errors.php on line 30
E_NOTICE отрабатывает, а E_STRICT идёт лесом. Прочитал, что ошибки типа E_STRICT возникают на этапе компиляции кода, а не на этапе выполнения. Ладно, внёс соответствующее значение error_reporting в php.ini:
error_reporting = E_ALL | E_STRICT
В phpinfo() имеем:
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
Т. е. E_STRICT вроде как включён, да только не видно этого в реальности.

Внимание, вопрос: в чём я заблуждаюсь? У кого-то с нормально установленным PHP (не Денвером) E_STRICT работает нормально? А может, даже работает у кого-то с Денвером??
 

theIggs

Новичок
Должно минимум 3:
- Конструктор теперь называется __construct()
- Вместо var полагается использовать модификатор public (или другой из той же серии)
- К символу в строке нужно обращаться, используя квадратные скобки вместо фигурных
 

Breeze

goshogun
Команда форума
Партнер клуба
theIggs
Ты сам читал то, на что даешь ссылки?

Conclusions:
1. We keep the alternative old-style constructor.
 

Фанат

oncle terrible
Команда форума
theIggs, веди себя скромнее.

-~{}~ 24.01.07 12:37:

Слушай, и правда.
Проверь свои утверждения по документации.
И вот когда они будут ей соответствовать, а не представлять из себя "наглый бессодержательный флуд" - тогда и продолжим.

-~{}~ 24.01.07 12:39:

Да ты, по ходу, просто неправильно перевел с английского =)
 

Solid

Drosera anglica
Желательно использовать, но не обязательно. E_STRICT может вылезти, например, когда обращаешься к не статическому методу через статический оператор "::".
 

Rammstein

PHPClub::News
Человек думал, что ему премия (как минимум нобелевская) полагается... ан нет, ошибочка вкралась :)
 

theIggs

Новичок
Ура!

Ну вот, на какие жертвы приходится идти, чтобы привлечь к себе внимание! :)

Ты сам читал то, на что даешь ссылки?
Естественно!
А вот на даты публикаций внимания не обратил... Информации по теме очень мало, поэтому обращал внимание на всё содержательное.

Проверь свои утверждения по документации.
К сожалению, документация вообще очень бедна этой информацией.
Стал проверять на одном из двух примеров, приведённых в документации, и - о чудо! -
PHP:
class fooclass {}

$bar =& new fooclass();
Strict Standards: Assigning the return value of new by reference is deprecated in z:\home\localhost\www\zend\errors.php on line 5
Также нашёл интересный момент:
The PHP 4 method of declaring a variable with the var keyword is still supported for compatibility reasons (as a synonym for the public keyword). In PHP 5 before 5.1.3, its usage would generate an E_STRICT warning.
Итак, окончательный ответ на мой вопрос:
уровень ошибок E_STRICT планировался к широкому (необязательному) использованию в PHP5 и планируется к широкому (обязательному) использованию в PHP6. Однако (в силу неизвестных мне причин) большинство из планировавшихся применений E_STRICT в версиях 5.1.х было отменено. По сути, E_STRICT остался только при неправильном использовании новой объектной модели и некоторых time/date-функций. Соответственно, удивляться полученным мною ранее результатам не стоит.

Вот и вам урок, господа: не разговаривайте с ньюбами через губу - не будет необходимости в волне праведного гнева. ;)
Со своей стороны приношу извинения за свою импульсивность! Ну, сами понимаете: когда человек начинает искать информацию? Да когда она нужна "уже вчера"... Так что ещё раз гоменасай и сумимасэн! %)
 

Фанат

oncle terrible
Команда форума
беда. он так ничего и не понял.

-~{}~ 24.01.07 15:48:

тема закрыта.
за неадекватное использование механизма "жалоба".
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху