Pastaruoju metu dažnai apsirašinėjant objektus teko rašyti daug setter’ių ir getter’ių. Man, kaip ir manau daugumai programuotoju, pabodo vis rašyti tą patį, tad nusprendžiau panaudoti magiškas PHP funkcijas
Tiksliau užteko vienos __call(string $name, array $arguments). Kodas atrodo taip:
/**
* dynamic set & get methods
* @param string $name
* @param string $value
* @author aur1mas
*/
public function __call($name, $value)
{
/**
* lower 4th letter (in setter & getters it's first letter of property)
* @var string
*/
$name{3} = mb_strtolower($name{3}, 'utf-8');
if (strpos($name, 'set') !== false) {
$property = '_' . str_replace('set', '', $name);
if (property_exists($this, $property)) {
$this->$property = $value[0];
return;
}
}
else if (strpos($name, 'get') !== false) {
$property = '_' . str_replace('get', '', $name);
if (property_exists($this, $property))
return $this->$property;
}
else {
throw new Exception(
'Dynamic setting only supports set & get methods');
}
throw new Exception(
'Property: ' . $property . ' not found in object ('
. get_class($this) . ') declaration.');
}
Manau daugumai kodas yra aiškus. Atributus apsirašinėju su ‘_’ prefix’u (pagal Zend Framework standartą).
Kodo panaudojimo pavyzdys atrodytų taip:
<?php
class Human extends Base{
protected $_eyes;
}
$human = new Human();
$human->setEyes('brown');
Jei kam kyla kokių nors klausimų ar turite pastabų (bug’ų) – rašykit