Геттеры и сеттеры
Метод get в PHP называют, когда нужно получить значение свойства, а set когда необходимо изменить его.
getНазваниевызывается, когда клиентский код пытается прочитатьprivate, позволяет внешнему коду получить значение приватного или защищённого свойства без прямого манипулирования им. Обычно имена геттеров начинаются сgetsetНазваниевызывается, когда клиентский код пытается присвоить значениеprivate, даёт возможность контролировать доступ к внутреннему состоянию объекта и обновлять его свойства. Обычно имена сеттеров начинаются сset
Есть два способа реализации гетеров и сетеров, для этого можно сделать свои методы которые будут обрабатывать запросы к методам и свойствам с модификаторами private:
<?
class Test
{
// приватное свойство
private $name;
// сеттер вызывается, когда клиентский код должен присвоить значение приватному свойству
public function setName($name)
{
$this->name = $name;
}
// геттер вызывается, когда клиентский код пытается прочитать значение приватного свойства
public function getName()
{
echo $this->name;
}
}
// создаем объект класса
$test = new Test();
// устанавлеваем приватное свойство, включается setName()
$test->setName("Иван");
// запрашиваем приватное свойство через публичный метод, включается getName()
$test->getName();
<?
class Test
{
// приватное свойство
private $name;
// сеттер вызывается, когда клиентский код должен присвоить значение приватному свойству
public function setName($name)
{
$this->nameCorrect($name);
}
// геттер вызывается, когда клиентский код пытается прочитать значение приватного свойства
private function getName()
{
echo $this->name;
}
// приватный метод, проверки данных
private function nameCorrect($name)
{
// проверка на строку
if (is_string($name)) {
// присвоение данных приватной переменной $name
$this->name = $name;
// вывод данных на экран
$this->getName();
}
}
}
// создаем объект класса
$test = new Test();
// устанавлевает приватное свойство, включается setName()
$test->setName("Иван");
Можно воспользоваться магическими методами ООП:
<?
class Test
{
// приватное свойство
private $name;
// вызывается, когда клиентский код пытается присвоить значение неопределенному свойству. При этом передается два аргумента, имя свойства и значение, которое клиентский код пытается присвоить
function __set($property, $value)
{
// проверка, есть ли в классе свойство
if (property_exists('Test', $property)) {
$this->name = $value;
}
}
// вызывается, когда клиентский код пытается прочитать необъявленное свойство. Вызов его происходит автоматически с одним строковым аргументом, содержащим имя свойства к которому клиентский код пытался получить доступ
function __get($name)
{
echo $this->name;
}
}
// создаем объект класса
$test = new Test();
// устанавлеваем private свойство, включается __set
$test->name = "Иван";
// запрашиваем private свойство, включается __get
$test->name;