class IntentManager {
protected $_data;
public function __construct($options) {
foreach($options as $key => $value)
$this->_data->{$key} = $value;
}
public function __call($method, $params){
switch(substr($method,0,3)){
case 'get':
$this->defaultGetter(substr($method,3));
break;
case 'set':
$this->defaultSetter(substr($method,3),$params);
break;
}
}
private function defaultSetter($name,$value){
$this->_data->{lcfirst($name)}=$value;
}
Для проверки работы использовал следующий код
$arr=array('first'=>1,'second'=>2);
$Intent=new IntentManager($arr);
$Intent->setSomeField(1);
print_r($Intent);
Вывод
IntentManager Object
(
[_data:protected] => stdClass Object
(
[first] => 1
[second] => 2
[someField] => Array
(
[0] => 1
)
)
)
Как вы видите someField - почему то массив.. а мне это не нужно . Предполагаю что преобразование в массив неявно производится при передаче данных в метод __call...
В общем в какую сторону копать? Может кто сталкивался с подобной проблемой...
Спустя 7 минут, 28 секунд (11.02.2012 - 15:57) caballero написал(а):
а почему бы не юзать __set и __get
намного проще
намного проще
class Session
{
private $values = array();
public function __set($name, $value)
{
$this->values[$name] = $value;
}
public function __get($name)
{
return $this->values[$name];
}
}
Спустя 22 минуты, 11 секунд (11.02.2012 - 16:19) sl4mmer написал(а):
Цитата (caballero @ 11.02.2012 - 12:57) |
а почему бы не юзать __set и __get намного проще |
Потому что для ряда полей будут свои аксессоры - дефолтные будут использоваться далеко не всегда.
Спустя 13 минут, 49 секунд (11.02.2012 - 16:33) caballero написал(а):
Цитата |
Потому что для ряда полей будут свои аксессоры - дефолтные будут использоваться далеко не всегда. |
А понятным языком? Какие дефолтные ? В чем задача состоит вообще?
Спустя 26 минут, 39 секунд (11.02.2012 - 17:00) sl4mmer написал(а):
Цитата (caballero @ 11.02.2012 - 13:33) |
А понятным языком? Какие дефолтные ? В чем задача состоит вообще? |
Дефолтные это видимо defaultSetter и defaultGetter
Суть проблемы я в первом посте изложил уже.
Можно конечно выбирать нулевой элемент массива.. но это как -то не айс
Спустя 59 минут, 22 секунды (11.02.2012 - 17:59) caballero написал(а):
Цитата |
Суть проблемы я в первом посте изложил уже. |
Судя по толпе желающих ответить в твое "изложение" никто не вьехал.
И потом я спрашивал суть задачи а не суть проблеммы потому как с большой долей вероятности можно предположить что проблемма изза реализации задачи.
Еще раз - нафига дергать методы с get set отлавливать их по дороге дикими конструкциями типа
$this->defaultSetter(substr($method,3),$params);
$this->_data->{lcfirst($name)}=$value;
если можно просто переопределить __get и __set.
а если не нужна сериализация или иные действия с $_data то вообще не надо ничего переопределять не надо = свойство создастся автоматически.
_____________
Неявное преобразование типов - это когда на вопрос "Нахрен?" вы отвечаете "Что значит зачем?!" ©