Чат PHP-разработчиков
Статические свойства и методы в языке PHP

Статические методы и свойства в PHP

Сегодня мы поговорим о статических свойствах и методах в PHP. Если коротко – то это свойства и методы, которые принадлежат классу целиком, а не созданным объектам этого класса. То есть использовать их можно даже без создания объектов. Иногда их называют просто свойствами и методами класса. Не путайте их со свойствами и методами объектов, которые мы изучали ранее!

Определяются статические свойства и методы с помощью ключевого свойства static.

Статические методы

Давайте рассмотрим самый простой пример статического метода.

Код доступен только после покупки курса ООП в PHP.

Как мы уже сказали, статические свойства и методы принадлежат классу, а не объектам, и использовать мы из можем без создания объектов. Для этого используется имя класса и двойное двоеточие, вот так:

Код доступен только после покупки курса ООП в PHP.

Результат:

Код доступен только после покупки курса ООП в PHP.

Само собой, становится понятно, что статические свойства и методы нужны, либо когда нам не требуется объект как таковой, либо его пока нет, но мы хотим создать объект с какими-то значениями по-умолчанию. Давайте сразу приведем пример. Допустим, у нас есть класс User:

Код доступен только после покупки курса ООП в PHP.

Мы с помощью конструктора можем создавать пользователей с разными ролями (модератор, администратор, простой пользователь) и именами.

Чтобы создать администратора, нам нужно сделать следующее:

Код доступен только после покупки курса ООП в PHP.

С помощью статического метода мы можем создать объекты этого класса, с указанием каких-либо значений по умолчанию. Например, можем сделать метод, который будет создавать администраторов, и ему на вход нужно будет только имя пользователя.

Код доступен только после покупки курса ООП в PHP.

Этот метод возвращает новый объект текущего класса (благодаря слову self), и передаёт ему всегда в аргумент $role значение ‘admin’. Использование такого метода будет выглядеть следующим образом.

Код доступен только после покупки курса ООП в PHP.

Вывод будет следующим:

Код доступен только после покупки курса ООП в PHP.

Всё у нас успешно сработало. В данном упрощенном примере, может показаться, что такой метод мало чем полезен, однако представьте, как будет удобно, если таких параметров в конструкторе будет 5, и из них 4 можно будет сделать для какого-то рода объектов всегда одинаковыми. В таком случае статический метод, порождающий объекты, становится изящным способом упростить код.

Отличие от методов объектов

В отличие от методов объектов, в статических методах нет слова $this – оно указывает только на текущий объект. Если объекта нет – нет и $this!

Статические свойства

А что на счёт статических свойств? Для чего можно использовать их?
Давайте создадим класс со статическим свойством:

Код доступен только после покупки курса ООП в PHP.

Мы можем читать и писать в это свойство, не создавая объектов этого класса:

Код доступен только после покупки курса ООП в PHP.

Кроме того, эти же свойства будут доступны и у объектов этого класса:

Код доступен только после покупки курса ООП в PHP.

И даже внутри этих объектов мы сможем достучаться до этих свойств, при помощи слова self::

Код доступен только после покупки курса ООП в PHP.

Ну и конечно же, так как статические свойства принадлежат классу, а не объектам, мы можем использовать их в статических методах.

Код доступен только после покупки курса ООП в PHP.

Применение статических свойств

Порой приходится в классе хранить информацию, которая будет использоваться всеми объектами, или будет говорить что-то общее обо всех объектах. Например, можно сделать счётчик созданных объектов внутри класса. Давайте создадим в классе Human статическую переменную $count, и сделаем её приватной, чтобы изменять её можно было только внутри класса. И давайте сразу сделаем для неё геттер.

Код доступен только после покупки курса ООП в PHP.

Давайте выведем значение этой переменной.

Код доступен только после покупки курса ООП в PHP.

Что нужно сделать, чтобы при создании нового объекта класса Human, это число увеличивалось? Правильно, просто увеличивать это значение в конструкторе – он ведь вызывается каждый раз при создании объекта.

Код доступен только после покупки курса ООП в PHP.

Давайте проверим, что всё работает:

Код доступен только после покупки курса ООП в PHP.

Вот таким вот образом можно использовать статические свойста и методы классов. Есть и другие примеры их использования, но об этом мы поговорим в следующих уроках.

Читайте также
Комментарии (4)


g--nokoder

Оставлять конструкторы публичными безопасно?

ivashkevich

А почему это может быть небезопасно?) Если конструктор будет private или protected, Вы не сможете создавать объекты этого класса, кроме как в методах этого класса.

ArtemijeKA

Спасибо.

ivashkevich

Пожалуйста.

Популярное за сутки
Сейчас читают
Логические задачи с собеседований