Цитирование статической страницы в руководстве по PHP :
Объявление свойств или методов класса
как статический делает их доступными
без необходимости создания экземпляров
класс . Недвижимость, объявленная как
статические не могут быть доступны с
экземпляр класса объекта (хотя
статический метод может) .
Также обратите внимание, что при объявлении свойства как статического будет существовать только одна версия этого свойства для всего сценария: статические методы / свойства "действуют на уровне класса, а не на уровне экземпляра" (цитирование википедии ) .
О достоинствах / недостатках сложно ответить однозначно, поскольку они не совпадают ...
Вопрос: что вам нужно?
Если у вас есть объект, который содержит данные, и вы хотите, чтобы методы обрабатывали эти данные, вы будете использовать динамические свойства и методы.
С другой стороны, если вы просто хотите использовать класс в качестве контейнера для методов, которые работают с внешними данными (т. Е. Не являются внутренними для класса) , вы, вероятно, будете использовать статические методы.
Например, я иногда использую статические методы в качестве оболочек для библиотек, которые не экспортируют API Oriented-Object: он позволяет мне вызывать одну class::method
вместо нескольких функций.
Кто-то скажет, что «преимущество» статических методов заключается в том, что вам не нужно создавать экземпляр класса для их использования - это правда; но это также означает, что вы не получаете объекты с методами, работающими с ними; хорошо: как я уже сказал, использование статического или нет зависит от того, что вам нужно.
О, я почти забыл: если вы хотите использовать модульное тестирование, вы можете обнаружить, что статические методы нелегко тестировать; например, см. Статические методы - смерть для тестирования .
И статические свойства (то же самое с шаблонами проектирования Singleton и реестра, которые основаны на статических свойствах / методах) подразумевает «глобальное состояние», такое как «глобальные переменные» - что некоторые не совсем как ^^