PHP Class Logic - PullRequest
       16

PHP Class Logic

1 голос
/ 24 сентября 2010

Мой вопрос довольно прост, учитывая:

class MyClass{
   function a(){
       echo "F.A ";
   }
   function b(){
       echo "F.B ";
   }
}

$c=new MyClass;
$c->a()->b()->b()->a();

Чтобы он вывел:

FA FB FB FA

Какие изменениякод должен быть сделан для того, чтобы это работало, или оно должно работать как есть или даже как это называется.Если бы я мог получить как-нибудь этот термин, я мог бы исследовать его mysqlf, но я не совсем уверен, что с Google.

Заранее спасибо!

Ответы [ 3 ]

7 голосов
/ 24 сентября 2010

В каждой функции вы должны:

  return $this;
6 голосов
/ 24 сентября 2010

Объединение подобных методов называется «сцеплением».

return $this; в каждом методе обеспечит возможность цепочки, так как он продолжает передавать экземпляр от одного метода к другому, поддерживая цепочку.

Вы должны сделать это явно, так как Функции PHP вернут NULL по умолчанию .

Итак, вам просто нужно еще 2 строки.

<?php
    class MyClass{
   function a(){
       echo "F.A ";
       return $this; // <== Allows chainability
   }
   function b(){
       echo "F.B ";
       return $this;
   }
}

$c=new MyClass;
$c->a()->b()->b()->a();
?>

Живой пример

Взгляните на эту статью Джона Сквибба для дальнейшего изучения возможности объединения в PHP.


Вы можете делать все виды вещей с возможностью объединения.Методы обычно включают аргументы.Вот «цепочка аргументов»:

<code><?php
   class MyClass{
   private $args = array();
   public function a(){
       $this->args = array_merge($this->args, func_get_args());
       return $this;
   }
   public function b(){
       $this->args = array_merge($this->args, func_get_args());
       return $this;
   }
   public function c(){
       $this->args = array_merge($this->args, func_get_args());
       echo "<pre>";
       print_r($this->args);
       echo "
"; вернуть $ this;}} $ c = new MyClass; $ c-> a (" a ") -> b (" b "," c ") -> b (4, "cat") -> a ("собака", 5) -> c ("end") -> b ("no") -> c ("ok"); // Вывод: //Array ([0] => a [1] => b [2] => c [3] => 4 [4] => cat // [5] => dog [6] => 5 [7] => end) // Array ([0] => a [1] => b [2] => c [3] => 4 [4] => cat // [5] => dog [6] =>5 [7] => end [8] => no [9] => ok)?>

Живой пример

0 голосов
/ 24 сентября 2010

Метод цепочки активно используется в предметно-ориентированных языках и, в частности, в так называемых «плавных интерфейсах», предложенных Мартином Фаулером. Посмотрите пре-печатную версию его книги DSL онлайн, если вы хотите изучить этот выразительный стиль программирования. http://martinfowler.com/dslwip/

...