PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
tabo
Отправлено: 23 Февраля, 2022 - 02:22:27
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2022  


Помог: 0 раз(а)




Встретил тут интересную штуку
PHP:
скопировать код в буфер обмена
  1.  
  2. $obj = (new class)->method(params1)->method(params2);
  3.  

вроде как понял (если правильно), что условный method, должен возвращать объект класса и по-своему обрабатывать параметры, но получается, что каждый раз создается новый объект и в итоге будет объект, с параметрами, которые были указаны в последнюю очередь.
подскажите, куда копать и как быть? Улыбка
 
 Top
don.bidon
Отправлено: 23 Февраля, 2022 - 04:13:23
Post Id


Гость


Покинул форум
Сообщений всего: 76
Дата рег-ции: Март 2019  


Помог: 2 раз(а)




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)

(Отредактировано автором: 23 Февраля, 2022 - 04:21:28)

 
 Top
tabo
Отправлено: 23 Февраля, 2022 - 09:53:32
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2022  


Помог: 0 раз(а)




а скажем можо сделать подобное
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 ?
 
 Top
Мелкий Супермодератор
Отправлено: 23 Февраля, 2022 - 14:13:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 617 раз(а)




PHP:
скопировать код в буфер обмена
  1.     public function setProperty($name)
  2.     {
  3.         // switch, вереница if'ов, variable variable
  4.         // или прочими извращениями по вкусу выставляете в зависимости
  5.         // от name нужное свойство $this->hasFoo
  6.         return $this; // возврат самого себя обеспечит возможность вызова цепочкой
  7.     }


-----
PostgreSQL DBA
 
 Top
tabo
Отправлено: 23 Февраля, 2022 - 14:34:46
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2022  


Помог: 0 раз(а)




Мелкий пишет:
PHP:
скопировать код в буфер обмена
  1.     public function setProperty($name)
  2.     {
  3.         // switch, вереница if'ов, variable variable
  4.         // или прочими извращениями по вкусу выставляете в зависимости
  5.         // от name нужное свойство $this->hasFoo
  6.         return $this; // возврат самого себя обеспечит возможность вызова цепочкой
  7.     }


Спасибо!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB