<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                1.Closure,匿名函數 ``` <? $func = function( $param ) { echo $param; }; $func( 'hello word' ); //輸出:hello word ``` ~~~ <?php $f = function () { return 100; }; function B(Closure $callback) { return $callback(); } $a = B($f); print_r($a);//輸出100 ~~~ 2. 閉包 將匿名函數在普通函數中當做參數傳入,也可以被返回。這就實現了一個簡單的閉包。 ~~~ <?php //例一 //在函數里定義一個匿名函數,并且調用它 function printStr() { $func = function( $str ) { echo $str; }; $func( ' hello my girlfriend ! ' ); } printStr();//輸出 hello my girlfriend ! //例二 //在函數中把匿名函數返回,并且調用它 function getPrintStrFunc() { $func = function( $str ) { echo $str; }; return $func; } $printStrFunc = getPrintStrFunc(); $printStrFunc( ' do you love me ? ' );//輸出 do you love me ? //例三 //把匿名函數當做參數傳遞,并且調用它 function callFunc( $func ) { $func( ' no!i hate you ' ); } $printStrFunc = function( $str ) { echo $str.'<br>'; }; callFunc( $printStrFunc ); ## 連接閉包和外界變量的關鍵字:USE 閉包可以保存所在代碼塊上下文的一些變量和值。PHP在默認情況下,匿名函數不能調用所在代碼塊的上下文變量,而需要通過使用use關鍵字 function getMoney() { $rmb = 1; $dollar = 8; $func = function() use ( $rmb ) { echo $rmb; echo $dollar; }; $func(); } getMoney(); //輸出:1 use所引用的也只不過是變量的一個副本clone而已。但是我想要完全引用變量,而不是復制呢?要達到這種效果,其實在變量前加一個 & 符號就可以了:如果將匿名函數返回給外界,匿名函數會保存use所引用的變量,而外界則不能得到這些變量 function getMoneyFunc() { $rmb = 1; $func = function() use ( &$rmb ) { echo $rmb.'<br>'; //把$rmb的值加1 $rmb++; }; return $func; } $getMoney = getMoneyFunc(); $getMoney(); $getMoney(); $getMoney(); //輸出: //1,//2,//3 ~~~ ~~~ <?php class A { public static function testA() { return function($i) { //返回匿名函數 return $i+100; }; } } function B(Closure $callback) { return $callback(200); } $a = B(A::testA()); print_r($a);//輸出 300 其中的A::testA()返回的就是一個無名funciton。 ~~~ 3.Closure閉包之Closure :: call - 綁定并調用閉包----php7以上 ``` <?php class A { private $x = 1; } // PHP 7+ code, Define $value = function() { return $this->x; }; print($value->call(new A)); ?> 輸出:1 ``` 4.# 依賴注入的理解 所謂依賴,舉個例子說明,一個類Person,另一個類Car,如果Person的某個方法比如說drive,需要引用Car,則稱Person類依賴于 Car類,延伸到對象,這種依賴關系依然成立 ~~~ <?php class C { public function doSomething() { echo __METHOD__, '我是C類|'; } } class B { private $c; public function __construct(C $c) { $this->c = $c; } public function doSomething() { $this->c->doSomething(); echo __METHOD__, '我是B類|'; } } class A { private $b; public function __construct(B $b) { $this->b = $b; } public function doSomething() { $this->b->doSomething(); echo __METHOD__, '我是A類|';; } } $class = new A(new B(new C())); $class->doSomething(); // C::doSomething我是C類|B::doSomething我是B類|A::doSomething我是A類| ~~~ 5.容器 ``` <?php class Test{ public $instances=[]; protected static $instance; private function __construct(){ } //實例化本身 public static function getInstance(){ if(is_null(static::$instance)){ static::$instance=new static; } return static::$instance; } 向容器注入類 public function set($key,$value){ $this->instances[$key]=$value; } /* 通過反射機制獲取容器里面的實例 */ public function get($key){ if($this->instances[$key]){ $key=$this->instances[$key]; } $reflect=new \ReflectionClass($key); $c=$reflect->getConstructor(); if(!$c){ return new $key; } $params=$c->getParameters(); if(empty($params)){ return new $key; } foreach ($params as $param) { $class=$param->getClass(); if(!$class){ }else{ $args[]=$this->get($class->name); } } return $reflect->newInstanceArgs($args); } } 調用: public function index(){ \Test::getInstance()->set('Person','\Person'); 注入Person類 \Test::getInstance()->set('Car','\Car'); $obj1=\Test::getInstance()->get('Person'); 獲取Person類 $obj2=\Test::getInstance()->get('Car'); echo $obj1->buy($obj2); //依賴注入 } ``` 6.門面 門面模式,是指提供一個統一的接口去訪問多個子系統的多個不同的接口,它為子系統中的一組接口提供一個統一的高層接口。使得子系統更容易使用 1.定義一個(或多個)具備所需接口的新類(門面類Facade) 2.新類門戶(門面類Facade)使用原來的系統(包含Hotel,Traffic,ScenicArea三個類) 3.客戶使用門面類對象與原系統打交道(客戶端只調用Facade)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看