Menu
Coddy logo textTech

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

Часть раздела Объектно-ориентированное программирование путешествия по 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::.

Ключевой момент: Статические методы полезны для служебных функций, которым не требуется состояние объекта, а также для управления данными на уровне класса. Они предоставляют функциональность без необходимости создавать экземпляр объекта.

challenge icon

Задание

Легко

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

Вы создадите два файла, чтобы организовать свой код:

  • IdGenerator.php: Define IdGenerator class, которая управляет генерацией уникальных ID, используя только статические члены. У class должно быть private static property $lastId, начинающееся с 0, и private static property $prefix, установленное в "ID". Create static method generate(), которая увеличивает последний ID и Returns отформатированную строку, combining prefix и новый ID (например, "ID1", "ID2" и т. д.). Add static method setPrefix($newPrefix), которая changes prefix, и static method getLastId(), которая 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, используя соответствующий статический метод

?>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор PHP