При следующем коде, должна вывалится E_STRICT ошибка:
<?php
error_reporting(E_ALL | E_STRICT);
abstract class Foo {
abstract static function bar();
}
?>
http://php.net/manual/ru/migration52.incompatible.php.
И я точно помню, что на PHP 5.4 встречал эту ошибку в одном из исходников. Сейчас же, вроде бы тоже окружение (PHP 5.4.9, также пробовал на PHP 5.3.3), но не могу вызвать эту ошибку специально, пользы от этого, конечно, никакой, но если не найду как получить здесь E_STRICT, не засну, помогите ))
Invis1ble
20.08.2013 - 20:23
хм, я даже не знал, что такой код вызовет E_STRICT...
проверил -
php 5.4.0 - Strict standards: Static function Foo::bar() should not be abstract in ...
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Не, это включено, в общем пока не ясно, беглый осмотр php.ini ничего не дал. Не могли ведь они после 5.4.0 опять всё вернуть, как было в 5.1, тем более у меня под виндой на 5.3.3 тоже ошибки нет. Я уже стал припоминать, что возможно я встречал её не у себя, а на dev-сервере, надо будет завтра на работе проверить и детально изучить различия, если всё сойдется )) Другие strict ошибки показывает.
5.3.26 есть ошибка. (Strict standards: Static function Foo::bar() should not be abstract in)
Жаль в мануале про это ничего не сказано. Почему нельзя.
Как вас легко поймать. Совсем толковых нет на этом форуме.
Абстрактным статический метод делать не верно, т.к. к нему можно обратиться через Foo::bar() и что оно будет вызывать то, если бы он был абстрактным?
Учитесь.
Игорь_Vasinsky
21.08.2013 - 15:36
спасибо великий гуру.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
moskitos80
21.08.2013 - 19:04
Цитата (Guest @ 21.08.2013 - 04:42) |
5.3.26 есть ошибка. (Strict standards: Static function Foo::bar() should not be abstract in) Жаль в мануале про это ничего не сказано. Почему нельзя. |
- Абстрактные статические методы не имеют смысла в контексте интерфейса.
_____________
Сложное - просто. Простое сложно.
Invis1ble
21.08.2013 - 19:45
обычный болотный обитатель средней упитанности
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Цитата (Guest @ 21.08.2013 - 15:01) |
Как вас легко поймать. Совсем толковых нет на этом форуме. Абстрактным статический метод делать не верно, т.к. к нему можно обратиться через Foo::bar() и что оно будет вызывать то, если бы он был абстрактным? Учитесь. |
Fatal error: Cannot call abstract method,
что совершенно логично!
bestxp
15.11.2016 - 11:46
да кстати на 5.6 сталкивался с этим на одном из окружений
если нужен абстрактный статический метод выноси его в интерфейс
SlavaFr
15.11.2016 - 18:01
В java и C++ тоже нет абстрактных статических методов. Здесь имеется хорошее объяснение на английском, почему:
https://coderanch.com/t/394249/java/Abstract-method-static
_____________
↓↓↓↓↓↓↓↓↓↓ответ может быть здесьили в mysql_error();