много свойств и методов у класса

craz

Нестандартное звание
много свойств и методов у класса

как реализуются такие вещи как

$Obj->param1
->param2

чето я никак не соображу.
не соображу даже как гуглу спросить
 

zerkms

TDD infected
Команда форума
craz
param1 это объект

PHP:
$obj_from_param_1 = $obj->param1;
$obj_from_param_1->param2;
семантический эквивалент.
 

craz

Нестандартное звание
да как реализовать это в классе чтоб автоматически было? то есть чтоб их можно было добавлять столько сколько нужно.

типа хранилища для опций

в зф так реализовано, пока не нашел как они там делают...
 

craz

Нестандартное звание
спасибо пошел копать.

а как это вообще называется когда так?

чтобы погуглить как правильно, это делать.
 

craz

Нестандартное звание
по сути так?
PHP:
if (array_key_exists($k, $this->_p))         {
   $v = $this->_p[$k];         
}         else         {  
   $v = $this->{$k} = $this;
}
 

craz

Нестандартное звание
ну я вроде описал хочу передавать стандартный объект в класс и там ловить, сколько у стандартного объекта свойств не важно

Вообще хочу написать "сферического коня", класс для работы с ExtJS, вот хочу опции передавать в объекте в класс, так более менее понятно?

Вообще я наверное понял, надо не существующему свойству класса присваивать $this, так или как? просто алгоритм бы где прочитать.

И в чем ужас?) я почитал вашу ссылку посмотрел там примеры

PHP:
<?php
class G {
    private $_p = array();
         public function __isset($k) 
    {
         return isset($this->_p[$k]);
     }            
 public function __get($k)     
{        
 $v = NULL;        
 if (array_key_exists($k, $this->_p))        
 {             
$v = $this->_p[$k];         
}         
else         
{             
$v = $this->{$k} = $this;         
}                
 return $v;     
}         
public function __set($k, $v)    
 {         
$this->_p[$k] = $v;                
 return $this;     
}    

}  
$s = new G();
$s->A->B->C = 'FOO';
 $s->X->Y->Z = array ('BAR');
  if (isset($s->A->B->C)) {     
print($s->A->B->C); } else {
     print('A->B->C is NOT set');
 }  
if (isset($s->X->Y->Z))
 {     print_r($s->X->Y->Z); 
} else {     
print('X->Y->Z is NOT set');
 }  // prints: FOOArray ( [0] => BAR ) ?>
насколько я могу судить пол 4го ночи, это то чем я займусь завтра)
 

zerkms

TDD infected
Команда форума
Вообще я наверное понял, надо не существующему свойству класса присваивать $this, так или как?
не так. не надо ничего никуда присваивать, нужно возвращать и всё.
И в чем ужас?) я почитал вашу ссылку посмотрел там примеры
в примерах по ссылке свойствам текущего объекта не присваивается $this.
 

Fortop

Новичок
Применительно к методам
PHP:
$db->select()->from()->where()
Это называется fluent interface

Применительно к свойствам, zerkms правильно сказал - нужно возвращать объект(естественно другой объект не $this)

PHP:
$line = new Line();
echo get_class($line->start); // Point
echo get_class($line->end); // Point
echo gettype($line->start->x);// integer
 

craz

Нестандартное звание
ну возвращать понятно, как это внутри класса то реализовано? пример правильный я нашел или нет?

За название очень большое спасибо

http://www.phpweblog.ru/fluent-interface/ - тут вручную прописаны сетеры свойств, а автоматически как в примере выше?
 

craz

Нестандартное звание
не туплю(
но ссылка от
Beavis все равно классная)
 

zerkms

TDD infected
Команда форума
craz
не тупи.

public function __call($name, $value) {
$this->{$name} = $value;
return $this;
}

$object->foo('bar')->baz('baz');
 

craz

Нестандартное звание
она ведет в эту же тему? рекурсия полезна для приобретения знаний?))
 

Beavis

Banned
craz
она ведет в эту тему, но на нужный ответ...
у каждого сообщения есть свой урл
видишь под каждым сообщением ссылку "URL сообщения"?)
 

craz

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