И это (обращение к статике класса внутри инстанцируемого объекта через self и прочие фокусы подобного плана) - уродливая багофича, специфичная для php, которую не выпилили из 7.1 лишь из жалости к тем, кто эту багофичу юзает в коде вышеописанным способом. Но с версии на версию ее срежут скорее всего, по этому я б советовал избегать ее использование.
Я описал конкретный пример, а не любое использование статики. Я именно про юзание бага, когда создают объект, но некие данные пишут в статическое поле в класс этого объекта, как бы "шаря" эти данные между инстансами. Видел упоминания, что это типа фича. А вот разрабы пыхи подтвердили, что это баг.
А что в этом плохого? Это и в плюсах есть. И типичный пример, который я во всех книгах по плюсам видел - счётчик созданных экземпляров (правда, я не знаю, какого реальное применение счётчика)
$user1=new User(1); //тут php ищет класс User и читает его, внутри этого класса есть создание класса, который подключается к базе. $user2=new User(2); //тут php по барабану, что он создавал из класса такой же объект, он просто берёт нужный класс и читает его, соответственно опять подключается к бд. --- Добавлено --- Я читал эту книгу немного, вроде бы всё понятно, но когда начинаю что то делать, то всё равно не знаю, как правильно использовать ООП. Может мне стоит начать изучать YII2, что бы пришло понимание, как использовать ООП
Немного - это до какой страницы? Yii2 можешь посмотреть, но лучше перед этим иметь базис какой-то. Там достаточно крутые вещи используются
То-есть PHP: protected static $object; это баго-фича, а PHP: private static $object; это уже норма? (Если данное свойство в родительском классе от которого только наследуются классы, но не создаются инстансы)
По-хорошему, в инстанцируемом классе не должно быть вообще статики. В том же C# есть понятие "Статический класс". Его в принципе нельзя инстанцировать. И это правильно. Все, что должно храниться в глобальном реестре, должно описываться именно в таком классе, а не в статических свойствах инстанцируемых классов. Это вот есть порядок.
@Fell-x27, но статический класс уж больно напоминает подключаемый модуль или библиотеку функций. Как бы при всем желании разработчиков сделать код правильнее не появились новые фичи - типа приватных конструкторов.
Не знаю, даже в Java допускается в Инстанцируем классе иметь статик свойства и статик методы, кроме того майн метод там всегда статик.
@Dimon2x, от английского слова instance произошло т.е. в нашем случае объект. --- Добавлено --- Не статик класс, от котого можно создавать объект.
@[vs], не совсем. @Fell-x27 говорит не о том, что статику вообще уберут - он говорит о том, что разрабы против возможности создания экземпляров классов, в которых есть статика. Да и синглтон можно реализовать без статики, но со статикой как-то проще ИМХО. @Fell-x27, а есть статейка на инглише, где это обсуждается?
Как говорится смотрите доку: Static calls to methods that are not declared static are deprecated, and may be removed in the future. https://php.ru/manual/migration70.deprecated.html
@keren, в приведенной Вами ссылке речь идет о вызове нестатических методов, как статических. Это не то.
Я писал о статических свойствах и методах. А потом пошел разговор о создании экземпляров классов со статическими свойствами и методами.
Но имхо там было неправильное выражение. Принадлежность к классу и статические свойства - это разные понятия.
Может "принадлежит" и не самое подходящее слово, но по контексту должно быть понятно, что оно означает.
Пардон - багофича это как раз: А просто статика в инстансах это - говноархитектура Возможно. --- Добавлено --- Вот оттуда отличная статья.