19 июля 2024 2 мин чтения 366 просмотров

Как использовать модификаторы доступа в ООП на PHP

В этом руководстве мы узнаем о том, как использовать модификаторы доступа в классах PHP

Как использовать модификаторы доступа в ООП на PHP

Что такое модификаторы доступа? Свойства и методы могут иметь модификаторы доступа, которые позволяют изменять способ доступа к ним. В PHP существует три модификатора доступа: public, private и protected.

Public

Значение по умолчанию - public: это означает, что если вы ничего не задаете, свойство или метод являются общедоступными.

class X {
    $a;
    $b;

    function aa()
    {
        echo $this->a;
    }
}

Разберем пример, допустим, если бы мы написали:

$ax = new X();
echo $ax->a;

Или так:

$ax->aa();

Оба эти действия являются правильными, поскольку их область действия является публичной.

Private

Частные свойства или методы, напротив, недоступны вне класса.

class X {
    private $a;
    private $b;

    function aa()
    {

    }

    private function bb()
    {
        return "bbb";
    }
}

В приведенном выше классе мы не можем получить значение $a с помощью echo $a->a, потому что $a является публичным свойством.

Мы также не можем использовать echo для отображения $a->bb() напрямую.

Если вы хотите получить доступ к значению частного свойства или метода вне класса, вам нужно использовать непубличную функцию.

Пример

class X {
    private $a;
    private $b;

    function aa()
    {

    }

    private function bb()
    {
        return "bbb";
    }

    public function bbb()
    {
        return $this->bb();
    }
}

В приведенном выше примере мы можем использовать функцию bbb() для возврата значения функции bb()

Protected

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

Одно из применений private и protected заключается в контроле того, какие свойства и методы будут наследоваться, а какие нет.

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