fork download
  1. <?php
  2. /*
  3.   Паттерн "Билдер"
  4.  
  5.   Например, у нас есть какой-то класс
  6.   с определёнными полями
  7.   и методом создания
  8.  
  9.   но мы не знаем заранее всех полей,
  10.   а объект создать и пользовать хотим
  11. */
  12. class Window
  13. {
  14. private $visible;
  15. private $modal;
  16.  
  17. function __construct( $v, $m ) {
  18. $this->visible = $v;
  19. $this->modal = $m;
  20.  
  21. }
  22.  
  23. function getIsVisible() {
  24. return ( $this->visible ? 'On' : 'Off' );
  25.  
  26. }
  27.  
  28. }
  29.  
  30.  
  31. /*
  32.   Создадим вспомогательный класс,
  33.   который будет определять поля основного
  34. */
  35. class CreateWindow {
  36. function setVisible( $flag ) { $this->visible = $flag; return $this; }
  37. function setModal( $flag ) { $this->modal = $flag; return $this; }
  38.  
  39. function render() {
  40. return new Window( $this->visible, $this->modal );
  41.  
  42. }
  43.  
  44. }
  45.  
  46. $WindowBuilder = new CreateWindow;
  47. $Window = $WindowBuilder->setVisible( true )->setModal( false )->render();
  48.  
  49. echo $Window->getIsVisible();
  50.  
Success #stdin #stdout 0.01s 83008KB
stdin
Standard input is empty
stdout
On