Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$a = 1;
$foo->bar = &$a;
class Human
{
private $passport;
private $age;
public function __get($name)
{
if ($this->isPassportPropertyName($name)) {
$name = $this->convertToPassportPropertyName($name);
$value = $this->passport->$name;
} elseif (property_exists($this, $name)) {
$value = $this->$name;
} else {
throw new \Exception('Oops, there is no such property here!');
}
}
}
class Human
{
private $passport;
private $age;
public function getPassportIssueDate()
{
return $this->passport->issueDate;
}
...
public function getAge()
{
return $this->age;
}
}
$vasya->getPassport()->getIssueDate()
isset(($this->getMetaData()->...)
$this->getMetadata()->has...();
public function getProperties()
{
return array_merge(parent::getProperties(), $this->_attributes, $this->getMetadata()->getProperties());
}
public function getProperty($name)
{
$properties = $this->getProperties();
if (!array_key_exists($name, $properties)) {
throw new \InvalidArgumentException('There is no [' . $name . '] property here.');
}
return $properties[$name];
}
В таких случаях я стараюсь использовать публичные свойства, а геттеры и сеттеры я использую для критических свойств, которые необходимо более строго контролировать
$a->bar = 1;
switch($a->bar) { case 1: ...
// было
public function setBar($value) {
$this->bar = (int) $value;
}
// стало
public function setBar($value) {
$this->bar[] = $value;
}
$query->limit = 100000;
public function setLimit($limit)
{
if ($limit > self::MAX_LIMIT) {
$limit = self::MAX_LIMIT;
}
$this->limit = $limit;
}
Публичные свойства, геттеры и сеттеры или магические методы?