Статические методы и свойства
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 17 из 91.
Подобно свойствам, методы могут быть статическими и принадлежать самому class, а не отдельным объектам. Статические методы вызываются непосредственно у class, без необходимости сначала создавать экземпляр.
Ты объявляешь статический метод с помощью ключевого слова static и вызываешь его, используя имя класса и оператор :::
<?php
class MathHelper {
public static function add($a, $b) {
return $a + $b;
}
public static function multiply($a, $b) {
return $a * $b;
}
}
echo MathHelper::add(5, 3) . "\n";
echo MathHelper::multiply(4, 2);
Вывод:
8
8Статические методы хорошо работают со статическими свойствами. Распространённый шаблон — использовать статический метод для управления общими данными класса:
<?php
class Counter {
private static $count = 0;
public static function increment() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
Counter::increment();
Counter::increment();
echo Counter::getCount();
Вывод:
2Обратите внимание, что статические методы не могут использовать $this, потому что экземпляра объекта не существует. Они могут обращаться только к статическим свойствам и другим статическим методам с помощью self::.
Ключевой момент: Статические методы полезны для служебных функций, которым не требуется состояние объекта, а также для управления данными на уровне класса. Они предоставляют функциональность без необходимости создавать экземпляр объекта.
Задание
ЛегкоДавайте создадим систему генерации ID, которая использует статические методы и свойства для создания уникальных идентификаторов без необходимости создавать экземпляры объектов.
Вы создадите два файла, чтобы организовать свой код:
IdGenerator.php: DefineIdGeneratorclass, которая управляет генерацией уникальных ID, используя только статические члены. У class должно быть private static property$lastId, начинающееся с0, и private static property$prefix, установленное в"ID". Create static methodgenerate(), которая увеличивает последний ID и Returns отформатированную строку, combining prefix и новый ID (например,"ID1","ID2"и т. д.). Add static methodsetPrefix($newPrefix), которая changes prefix, и static methodgetLastId(), которая returns current value of$lastId.main.php: Include файл class IdGenerator. Сгенерируйте два ID, используя prefix default, и Print каждый из них в собственной строке. Затем измените prefix на"USER"с помощью static method, сгенерируйте ещё два ID и Print каждый из них. Наконец, Print номер last ID, вызвав appropriate static method.
Помните, что static methods вызываются непосредственно у class с использованием ClassName::methodName(), а внутри class доступ к static properties осуществляется через self::$propertyName. Поскольку object instance отсутствует, вы не можете использовать $this в static methods.
Ваш вывод должен показывать последовательность ID с разными prefix, демонстрируя, как static properties сохраняют свои значения при многочисленных вызовах method.
Попробуйте сами
<?php
// Подключить файл класса IdGenerator
require_once 'IdGenerator.php';
// TODO: Сгенерировать два ID, используя префикс по умолчанию, и вывести каждый на своей строке
// TODO: Изменить префикс на "USER" с помощью статического метода
// TODO: Сгенерировать ещё два ID и вывести каждый на своей строке
// TODO: Вывести номер последнего ID, используя соответствующий статический метод
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово $thisМетодыСвойстваКонструктор (__construct)Деструктор (__destruct)Повторение — простой калькулятор4Наследование
Основы наследованияКлючевое слово parent::Переопределение методовКлючевое слово finalАбстрактные классыПовторение — иерархия сотрудников7Инкапсуляция
Public, Protected, PrivateМодификаторы доступа подробноГеттеры и сеттерыСокрытие информацииПродвижение конструктора (8.0)Повторение — система учёта студентов2Пространства имён и автозагрузка
Введение в пространства имёнКлючевое слово useСтандарт автозагрузки PSR-4Автозагрузчик ComposerПовторение — структурированный проект5Интерфейсы и контракты
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовИнтерфейс и абстрактный классАннотация типов с интерфейсамиПовторение — калькулятор фигур8Магические методы
Введение в магические методы__toString и __debugInfo__get, __set, __isset, __unset__call и __callStatic__clone и клонирование объектов__serialize и __unserializeПовторение — пользовательская коллекция3Свойства классов
Свойства экземпляра и статические свойстваКонстанты в классахСтатические методы и свойстваПриватные и защищённые свойстваСвойства только для чтения (PHP 8.1)Повторение — менеджер банковского счёта6Полиморфизм
Повторение переопределения методовПолиморфизм через интерфейсыАннотации типов и объединённые типыПозднее статическое связываниеПовторение — обработчик платежей9Трейты
Введение в трейтыИспользование нескольких трейтовРазрешение конфликтов трейтовАбстрактные методы в трейтахТрейты и наследование12Паттерны проектирования, часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн StrategyПотренируйтесь самостоятельно: Онлайн-компилятор PHP