Строгий режим PHP 5.2: почему запрещены методы абстрактного статического класса?
В PHP 5.2 включение строгих предупреждений может вызвать знакомое предупреждение : «Статическая функция не должна быть абстрактной». Это предупреждение связано с изменением, внесенным в PHP 5.2, которое запрещает абстрактные статические методы класса.
Причина: исторический надзор
В PHP 5.2 изначально отсутствовали поздние статические привязки, делая абстрактные статические функции бесполезными. Поскольку ключевое слово self в абстрактных статических методах относилось к родительскому классу, а не к дочернему классу, для которого был вызван метод, такие методы не имели практического значения. Таким образом, предупреждение было предназначено для выявления и предотвращения потенциальных ошибок кодирования.
Поздние статические привязки и ошибочное обоснование
В PHP 5.3 были введены поздние статические привязки, позволяющие статические методы дочерних классов, которые будут вызываться из родительских методов с использованием ключевого слова static. Это устранило технический барьер, делавший абстрактные статические методы бесполезными. Однако в PHP 5.2 предупреждение сохранилось на основании слабого аргумента: раскрытие абстрактных статических методов может привести к поломке общедоступных методов.
Ложное восприятие
Оправдание для предупреждение было ошибочным. Абстрактные статические методы могут сосуществовать с поздними статическими привязками, обеспечивая допустимый вариант использования для вызова статических методов дочерних классов из родительских методов.
Замешательство и неточный ответ
A Отчет об ошибке PHP с просьбой удалить предупреждение из-за добавления поздних статических привязок получил пренебрежительный ответ от Расмуса Лердорфа. Он ошибочно заявил, что абстрактные статические методы с поздними статическими привязками были функциональными, что было неверным, поскольку они все равно вызывали предупреждение. Эта путаница и отсутствие ясности привели к тому, что предупреждение не исчезло.
Решение в PHP 7
К счастью, в PHP 7 наконец-то исправили эту проблему, переклассифицировав это предупреждение просто к уведомлению. С появлением PHP 7 абстрактные статические методы полностью поддерживаются и могут безопасно использоваться без каких-либо предупреждений.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3