Запишување на својства преку магија во ООП во PHP
Магичниот метод __set се повикува
при обид за промена на вредноста на непостоечко
или скриено својство. Како параметри
ги прифаќа името на својството и вредноста која
се обидуваат да му ја доделат.
Да го погледнеме практичниот пример.
Нека ни е дадена класата Test:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Да направиме во оваа класа магичен
метод __set, кој со помош на функцијата
var_dump ќе го прикаже името на својството,
до кое се направил пристап, и вредноста,
која се обидуваат да му ја поставят на ова својство:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Да ја провериме работата на нашата класа:
<?php
$test = new Test;
$test->prop = 'value'; // var_dump на методот __set ќе испечати 'prop value'
?>
Сега да почнеме да поставуваме вредност
на својство чие име е зачувано во променливата
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // ја поставуваме вредноста
}
}
?>
Сега можеме да запишуваме во приватни својства надвор од класата:
<?php
$test = new Test;
$test->prop1 = 1; // ќе запишеме 1
$test->prop2 = 2; // ќе запишеме 2
?>
Можеме да запишуваме, сепак, да провериме дали нешто е запишано таму - не, бидејќи својствата се приватни.
Може да се направи getter за овие својства или
едноставно да се искористи магичниот метод
__get. Да го искористиме вториот вариант:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Магичен getter за својства:
public function __get($property)
{
return $this->$property;
}
}
?>
Сега веќе можеме да ја провериме работата на нашата класа. Да провериме:
<?php
$test = new Test;
$test->prop1 = 1; // ќе запишеме 1
$test->prop2 = 2; // ќе запишеме 2
echo $test->prop1; // ќе испечати 1
echo $test->prop2; // ќе испечати 2
?>
Всушност, се разбира, не треба да се дозволи на сите произволно да запишуваат во приватни својства, инаку целата поента на тие приватни својства се губи (полесно е да се направат јавни и толку).
Затоа овој метод треба да се применува само тогаш кога навистина постои потреба за тоа. Во следните лекции уште ќе разгледаме примери на успешна примена.