TOC

This article has been localized into Russian by the community.

Классы:

Статические классы

Поскольку для одного класса можно создать несколько экземпляров, это означает, что содержащиеся в нем значения уникальны для каждого экземпляра/объекта, а не для класса в целом. Кроме того, вы не можете использовать методы или переменные класса без создания объекта, но есть одно исключение из этого правила. Как переменные, так и методы класса могут быть объявлены статическими (static, в некоторых языках программирования их называют "shared" - "общими"), что означает, что их можно использовать без создания экземпляра. Так как это означает, что переменная класса становится доступной без конкретного объекта, будет создана единственная версия этой переменной. Еще одно следствие - статические методы не имеют доступа к нестатическим переменным и методам, которые привязаны к экземплярам.

В предыдущем параграфе мы написали класс User. Давайте расширим его с помощью статического функционала, чтобы понять, о чем речь:

<?php
class User
{
    public $name;
    public $age;
    public static $minimumPasswordLength = 6;
    
    public function Describe()
    {
        return $this->name . " is " . $this->age . " years old";
    }
    
    public static function ValidatePassword($password)
    {
        if(strlen($password) >= self::$minimumPasswordLength)
            return true;
        else
            return false;
    }
}

$password = "test";
if(User::ValidatePassword($password))
    echo "Password is valid!";
else
    echo "Password is NOT valid!";
?>

Мы добавили одну статическую переменную $minimumPasswordLength, заданную равной 6, а также статическую функцию, которая проверяет валидность переданного в нее пароля. Я признаю, что валидация здесь крайне ограничена, и очевидно, ее можно расширить. Так, а можно ли использовать обычную переменную и функцию класса? Конечно да, но сделать их статическими логичнее, ведь проверка не привязана к одному конкретному пользователю - это общая функциональность, нам не нужен экземпляр класса, чтобы ее использовать.

Как вы можете видеть, чтобы получить доступ к нашей статической переменной из статического метода, мы используем перед ней ключевое слово self (сам) - аналог this для статических членов и констант. Очевидно, self доступен только внутри класса. Вы также заметите, что для доступа к статическим членам используется двойное двоеточие, а не оператор ->, но в остальном они почти не отличаются.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!