Как использовать модификаторы доступа в ООП на 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.