sql >> Databáze >  >> RDS >> Mysql

PHP volání více objektových funkcí

tomu se říká řetězení metod a provádí se vrácením odkazu na class( $this ) nebo jiný objekt třídy z těchto funkcí. Potom můžete volat metodu na vráceném objektu.

Zde je jednoduchý příklad.

class foo{
     protected $_bar;

     public function bar($value){
          $this->_bar = $value;
          return $this;
    }


   public function out(){
        echo $this->_bar;
   }
}

$a = new foo();
$a->bar('hello')->out();

výstup:

'hello'

Abychom to trochu více vysvětlili, výše uvedený kód $a->bar('hello')->out(); je zhruba ekvivalentní provedení tohoto:

 $a = new foo();
 $b = $a->bar('hello');  //$a and $b are the same instance of the object
 $b->out();

Nyní, protože bar() vrátí $this mohli bychom to přiřadit $b jako výše a poté zavolejte out() . Ale $a a $b oba odkazují na stejnou instanci foo objekt, protože jsme vrátili $this z bar() . Není tedy potřeba tato další "falešná" proměnná, protože můžeme pouze odkazovat na návratový objekt přímo pro další volání. Funguje to s libovolným objektem, který je vrácen z metody (nejen $this), ale samozřejmě pak je další volání v řetězci proti vrácenému objektu.




  1. Sqlalchemy vrací zastaralé řádky?

  2. Zachovat časové pásmo v typu Timestamptz PostgreSQL

  3. SQLite - Nelze otevřít soubor databáze

  4. Jak transponovat MYSQL db v PHP