Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите разобраться !
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Помогите разобраться !

Страниц (1): [1]
 

1. tabo - 23 Февраля, 2022 - 02:22:27 - перейти к сообщению
Встретил тут интересную штуку
PHP:
скопировать код в буфер обмена
  1.  
  2. $obj = (new class)->method(params1)->method(params2);
  3.  

вроде как понял (если правильно), что условный method, должен возвращать объект класса и по-своему обрабатывать параметры, но получается, что каждый раз создается новый объект и в итоге будет объект, с параметрами, которые были указаны в последнюю очередь.
подскажите, куда копать и как быть? Улыбка
2. don.bidon - 23 Февраля, 2022 - 04:13:23 - перейти к сообщению
tabo, что в методе-то? ничего ему не мешает объект другого класса возвращать.
PHP 7.4
PHP:
скопировать код в буфер обмена
  1. class Foo
  2. {
  3.     public function method($params): Bar
  4.     {
  5.         echo sprintf("%s\n", __METHOD__);
  6.         var_dump($params);
  7.  
  8.         return new Bar();
  9.     }
  10. }
  11.  
  12. class Bar
  13. {
  14.     public function method($params)
  15.     {
  16.         echo sprintf("%s\n", __METHOD__);
  17.         var_dump($params);
  18.     }
  19. }
  20.  
  21. (new Foo)->method(1)->method(2);

выдаст
CODE (text):
скопировать код в буфер обмена
  1. Foo::method
  2. int(1)
  3. Bar::method
  4. int(2)
3. tabo - 23 Февраля, 2022 - 09:53:32 - перейти к сообщению
а скажем можо сделать подобное
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Class A
  3. {
  4.     public $hasFlag = false;
  5.     public $hasBrick = false;
  6. }
  7.  
  8. $a = (new A)->setProperty("flag")->setProperty("brick");
  9.  

и получить объект, где $hasFlag && $hasBrick будут true ?
4. Мелкий - 23 Февраля, 2022 - 14:13:16 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.     public function setProperty($name)
  2.     {
  3.         // switch, вереница if'ов, variable variable
  4.         // или прочими извращениями по вкусу выставляете в зависимости
  5.         // от name нужное свойство $this->hasFoo
  6.         return $this; // возврат самого себя обеспечит возможность вызова цепочкой
  7.     }
5. tabo - 23 Февраля, 2022 - 14:34:46 - перейти к сообщению
Мелкий пишет:
PHP:
скопировать код в буфер обмена
  1.     public function setProperty($name)
  2.     {
  3.         // switch, вереница if'ов, variable variable
  4.         // или прочими извращениями по вкусу выставляете в зависимости
  5.         // от name нужное свойство $this->hasFoo
  6.         return $this; // возврат самого себя обеспечит возможность вызова цепочкой
  7.     }


Спасибо!
6. avtor.fox - 23 Февраля, 2024 - 02:39:24 - перейти к сообщению
Мелкий, в DBA пошёл?!)))

 

Powered by ExBB FM 1.0 RC1