<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                http://www.thinkphp.cn/topic/13624.html php5.3有一個非常贊的新特性,那就是支持匿名函數(閉包)。匿名函數可用于動態創建函數,并保存到一個變量中。舉個栗子:` 1. $func?=function(){ 2. exit('Hello?world!!'); 3. };//這里必須要有;結尾 4. $func(); 復制代碼 `等效于` 1. function?func(){ 2. exit('Hello?world!!'); 3. } 4. func(); 復制代碼 `看上去沒什么新奇的地方是不?(☆\_☆)/~~ 別急,繼續看。 看這段代碼:` 1. function?operate($operator){ 2. if($operator?=="-"){ 3. returnfunction($a,$b){ 4. return?$a-$b; 5. }; 6. }else{ 7. returnfunction($a,$b){ 8. return?$a+$b; 9. }; 10. } 11. } 13. $subtraction?=?operate("-"); 14. echo?$subtraction(4,3);//1 15. $addition?=?operate("+"); 16. echo?$addition(1,2);//3 復制代碼 `通過operate函數,我們可以生成不同的函數作為結果返回,并將這個結果直接作為函數調用,上面的代碼分別動態創建了減法運算和加法運算函數。 如果說僅僅是這樣的話,那么我并不覺得它有多少吸引力,下面我將展示一個實戰中用到的技巧:` 1. <?php 2. header("Content-Type:text/html;charset=utf-8"); 3. classDi{ 4. private?$_factory; 5. publicfunctionset($id,$value){ 6. ????????$this->_factory[$id]=?$value; 7. } 9. publicfunctionget($id){ 10. ????????$value?=?$this->_factory[$id]; 11. return?$value(); 12. } 13. } 15. classUser{ 16. private?$_username; 17. function?__construct($username=""){ 18. ????????$this->_username?=?$username; 19. } 20. function?getUserName(){ 21. return?$this->_username; 22. } 23. } 25. //從這里開始看 26. $di?=newDi(); 27. $di->set("zhangsan",function(){ 28. returnnewUser('張三'); 29. }); 30. $di->set("lisi",function(){ 31. returnnewUser("李四"); 32. }); 34. echo?$di->get("zhangsan")->getUserName(); 35. echo?$di->get("lisi")->getUserName(); 復制代碼 `代碼中有一個Di容器用來保存對象實例,然后通過set()方法注冊服務,通過get()方法獲取服務。 我們看到$di->set()的時候,使用了匿名函數,我們預先注冊了zhangsan和lisi兩個服務,這兩個服務都是User類的實例,在$di->set的時候實際上并沒有實例化,而是在$di->get()的時候才執行了匿名函數并將對象返回,這就實現了按需實例化,不用則不實例化,提高效率。 **閉包特性**: 經常寫js的同學應該知道js的閉包特性,簡單的說就是在一個函數里可以定義子函數,父函數中的變量在子函數中可以直接使用,那么PHP的閉包怎么用呢?有一點區別。` 1. function?func1($a){ 2. returnfunction()use($a){ 3. ????????echo?$a; 4. }; 5. } 6. $a?=?func1("a"); 7. $a();//輸出a 復制代碼 `當你想將外層變量傳進內層匿名函數時,使用use (變量)的方式。 閉包的用途可以用于很多地方,常見于DI模式中,這篇文章的代碼只是為了說明,不可以直接使用,謝謝。
                  <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>

                              哎呀哎呀视频在线观看