[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Магия и инкапсуляция
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
twin
Цитата (MiksIr @ 15.10.2013 - 17:07)
Цитата
Да, но причем тут магические сеттеры? Есть же более цивилизованные способы. С той же магией. Вот допустим примерчик. В мануале подобный видел...

И что изменилось? Ничего. __call ровно на столько же, насколько и __get позволяет разработчику класса посадить баг.

Цитата
Да посмотрите мой пример. Я вообще не хочу никакого сеттера на свйство $a. Не нужен он мне. Я хочу ошибку
, что бы не лез никто, кому не повадно. А оно мне NULL выдает. Ну и еще примеры приводили с переопределениями.


Да ради бога. Хотите ошибку - получите, если сами не можете додуматься.


Баг можно посадить много куда. Но тут обращение к доступным методам. И контролируемым.
А не к приватным свойствам. Что само по себе - нонсенс. Пусть с моей точки зрения, не спорю. Однако это логично, свойство закрыто - ошибка. А не NULL или еще черти чё.

Цитата
class myClass {

  protected $items = array();
 
  private $a;
 
  public function __set($name, $value)
  {
    $this->items[$name] = $value;
  }

  public function __get($name)
  {
    if (!isset($this->items[$name])) {
      throw new Exception();
    }
    return $this->items[$name];
  }
}


$obj = new myClass();
echo $obj->a;


Вот вам ваша ошибка, довольны?
Совершенно не доволен. Это костыль. Мы тут про особенности языка говорим, а не про исправление его недочетов.

Пусть с вашей точки зрения это хорошо, но логичнее всетаки так:
class myClass {

protected $items = array();

private $a;

public function setProperty($name, $value)
{
$this->items[$name] = $value;
}

public function getProperty($name)
{
return $this->items[$name];
}
}


$obj = new myClass();
$obj->setProperty('var', 100);
echo $obj->getProperty('var');
echo $obj->a;

И волки сыты, и задокументировать можно красиво и ошибка штатная, а не костыль.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.