Геттеры и сеттеры
Реализуются с помощью двух методов:
getНазвание
вызывается, когда клиентский код пытается прочитатьprivate
setНазвание
вызывается, когда клиентский код пытается присвоить значениеprivate
Есть два способа реализации гетеров и сетеров, для этого можно сделать свои методы которые будут обрабатывать запросы к методам и свойствам с модификаторами 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;