Ситуация..
Пишет мне один знакомый, мол, проверь код:
<?php
ini_set("display_errors", "On");
ini_set("html_errors", "On");
error_reporting(-1);
abstract class A {
abstract public static function foo();
}
Говорит: Я не могу указать, что он должен быть static. Интерпретатор ругается:
Strict Standards: Static function A::foo() should not be abstract
Проверяю у себя - все работает без нотайсов при максимальном уровне ошибок. Ни в CLI ни в Apache handler режимах ошибок не наблюдается.
Отлично. Сверяем версии и платформы: У него: php 5.4 Windows У меня: php 5.3 Debian 6 (of repo)
Находим в документации:
Не поддерживаются абстрактные статические методы классов. По недосмотру, PHP 5.0.x и 5.1.x позволяли определять абстрактные статические методы классов. Начиная с PHP 5.2.x такие методы могут быть только у интерфейсов.
Тэкс, php.net пишет что лавочку прикрыли в версии 5.2, но у меня 5.3. Ладно, пишу еще одному знакомому - он напрямую общается с кем-то из разрабов php, или приближенным к ним.
Ответ такой:
это баг. но не php - а мейнтейнера пакета. так что, если есть желание, оформляйте и отправляйте
Чего надо бы еще:
Если дочитали до этого места, значит видели что уменя Debian 6 и php установленный из оф репозиториев, конкретно:
PHP 5.3.3-7+squeeze15 with Suhosin-Patch (cli) (built: Mar 4 2013 14:05:25)
Очень реквестую проверить Вас на своих машинках такое поведение интерпретатора. У кого что, вне зависимости от версии и дистра.
Возможно - проблема не только в конкретно моей сборке. После того как кто-то еще может быть отпишется - оформим багрепорт и отправим как положено.