[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема c __call
sl4mmer
Пишу простенький класс.

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 biggrin.gif

Суть проблемы я в первом посте изложил уже.

Можно конечно выбирать нулевой элемент массива.. но это как -то не айс

Спустя 59 минут, 22 секунды (11.02.2012 - 17:59) caballero написал(а):
Цитата
Суть проблемы я в первом посте изложил уже.


Судя по толпе желающих ответить в твое "изложение" никто не вьехал.
И потом я спрашивал суть задачи а не суть проблеммы потому как с большой долей вероятности можно предположить что проблемма изза реализации задачи.

Еще раз - нафига дергать методы с get set отлавливать их по дороге дикими конструкциями типа
$this->defaultSetter(substr($method,3),$params);
$this->_data->{lcfirst($name)}=$value;
если можно просто переопределить __get и __set.
а если не нужна сериализация или иные действия с $_data то вообще не надо ничего переопределять не надо = свойство создастся автоматически.







_____________
Неявное преобразование типов - это когда на вопрос "Нахрен?" вы отвечаете "Что значит зачем?!" ©
Быстрый ответ:

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