В предыдущем занятии Вы узнали, как использовать модификатор public со свойствами и методами.
Фактически, в PHP есть три модификатора доступа: public, private и protected. В этом руководстве вы сосредоточитесь на модификаторах public и private.
Когда вы помещаете ключевое слово public перед свойством или методом, свойство или метод становятся общедоступными. Это означает, что вы можете получить доступ к свойству и методу как внутри, так и вне класса.
В следующем примере показано использование модификатор public:
<?php
class Customer
{
public $name;
public function getName()
{
return $this->name;
}
}
В этом примере класс Customer имеет public свойство ($ ame) и public метод (getName()). И вы можете получить доступ к свойству и методу как внутри, так и за пределами класса. Например:
<?php
class Customer
{
public $name;
public function getName()
{
return $this->name;
}
}
$customer = new Customer();
$customer->name = 'Bob';
echo $customer->getName(); // Bob
Как это работает:
Чтобы предотвратить доступ к свойствам и методам извне класса, используется модификатор доступа private. В следующем примере свойство $name класса Customer изменяется с public на private:
<?php
class Customer
{
private $name;
public function getName()
{
return $this->name;
}
}
Если вы попытаетесь получить доступ к свойству $name извне класса, вы получите сообщение об ошибке. Например:
$customer = new Customer();
$customer->name = 'Bob';
Ошибка:
Fatal error: Uncaught Error: Cannot access private property Customer::$name
Так как же получить доступ к private свойству?
Чтобы управлять значением private свойства, вам необходимо определить public метод и использовать этот метод для управления private свойством.
Обычно для управления private свойством необходимо определить два типа public методов:
По соглашению, геттер и сеттер имеют следующие имена:
getPropertyName
setPropertyName
Следующий класс Customer определяет методы getName и setName для получения и установки значения свойства $name:
<?php
class Customer
{
private $name;
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
}
А ниже показано, как использовать методы setName() и getName() для установки и получения значения свойства $name:
$customer = new Customer();
$customer->setName('Bob');
echo $customer->getName();
Возможно, будет быстрее и удобнее использовать public модификатор для свойств вместо использования private свойства с public методами получения / установки.
Однако, используя private свойство, вы можете предотвратить прямой доступ к свойству извне класса.
Кроме того, методы getters/setters гарантируют, что единственный способ получить доступ к свойству - использовать эти методы. Эти методы могут предоставлять настраиваемую логику для управления значением свойства.
Например, если вы хотите, чтобы значение свойства $name не было пустым, вы можете добавить логику проверки к методу setName() следующим образом:
<?php
class Customer
{
private $name;
public function setName($name)
{
$name = trim($name);
if ($name !== '') {
return false;
}
$this->name = $name;
return true;
}
public function getName()
{
return $this->name;
}
}
$customer = new Customer();
$customer->setName(' Bob ');
echo $customer->getName();