PHP7之Closure::call javascript 閉包 需要閉包 google closur
Closure 類別:匿名函數(在 PHP 5.3 中被引入)會產生這個類型的物件。
可將該類別綁定到類別或物件上,即將自訂的方法動態新增至類別或物件上
php7之前使用的方法
Closure::bind :複製一個閉包,綁定指定的$this物件和類別作用域。這個方法是 Closure::bindTo() 的靜態版本
Closure::bindTo :複製目前閉包對象,綁定指定的$this物件和類別作用域。建立並傳回一個 匿名函數, 它與目前物件的函數體相同、綁定了相同變量,但可以綁定不同的對象,也可以綁定新的類別作用域。
php7新增
- Closure::call() : 方法被加入作為臨時綁定的物件範圍,以封閉並簡單地呼叫它的方法。它的性能相比PHP5.6 bindTo要快得多。
<code><span>//bind.php</span><span><?php</span><span>/** * Created by PhpStorm. * User: bee * Date: 2016/4/24 * Time: 22:35 */</span><span><span>class</span><span>A</span> {</span><span>private</span><span>static</span><span>$sta</span> = <span>1</span>; <span>private</span><span>$com</span> = <span>2</span>; } <span>$cl1</span> = <span>static</span><span><span>function</span><span>()</span> {</span><span>return</span> A::<span>$sta</span>; }; <span>$cl2</span> = <span><span>function</span><span>()</span> {</span><span>return</span><span>$this</span>->com; }; <span>$bcl1</span> = Closure::bind(<span>$cl1</span>, <span>null</span>, <span>'A'</span>); <span>$bcl2</span> = Closure::bind(<span>$cl2</span>, <span>new</span> A(), <span>'A'</span>); <span>echo</span><span>$bcl1</span>(), <span>"\n"</span>; <span>echo</span><span>$bcl2</span>(), <span>"\n"</span>;</span></code>
<code><span><?php</span><span>//bindTo.php</span><span>/** * Created by PhpStorm. * User: bee * Date: 2016/4/24 * Time: 22:35 */</span><span><span>class</span><span>A</span> {</span><span><span>function</span><span>__construct</span><span>(<span>$val</span>)</span> {</span><span>$this</span>->val = <span>$val</span>; } <span><span>function</span><span>getClosure</span><span>()</span> {</span><span>//returns closure bound to this object and scope</span><span>return</span><span><span>function</span><span>()</span> {</span><span>return</span><span>$this</span>->val; }; } } <span>$ob1</span> = <span>new</span> A(<span>1</span>); <span>$ob2</span> = <span>new</span> A(<span>2</span>); <span>$cl</span> = <span>$ob1</span>->getClosure(); <span>echo</span><span>$cl</span>(), <span>"\n"</span>; <span>$add</span> = <span><span>function</span><span>()</span>{</span><span>return</span><span>$this</span>->val+<span>1</span>; }; <span>$cl</span> = <span>$add</span>->bindTo(<span>$ob2</span>); <span>//与call相比,需要增加()方可被调用</span><span>echo</span><span>$cl</span>(), <span>"\n"</span>;</span></code>
<code><span><?php</span><span>//call.php</span><span>/** * Created by PhpStorm. * User: bee * Date: 2016/4/24 * Time: 22:35 */</span><span><span>class</span><span>Value</span> {</span><span>protected</span><span>$value</span>; <span>public</span><span><span>function</span><span>__construct</span><span>(<span>$value</span>)</span> {</span><span>$this</span>->value = <span>$value</span>; } <span>public</span><span><span>function</span><span>getValue</span><span>()</span> {</span><span>return</span><span>$this</span>->value; } } <span>$three</span> = <span>new</span> Value(<span>3</span>); <span>$four</span> = <span>new</span> Value(<span>4</span>); <span>$closure</span> = <span><span>function</span><span>(<span>$delta</span>)</span> {</span><span>return</span><span>$this</span>->getValue() + <span>$delta</span>; }; <span>//可直接调用,不用在后面增加()</span><span>echo</span><span>$closure</span>->call(<span>$three</span>, <span>3</span>); <span>echo</span><span>$closure</span>->call(<span>$four</span>, <span>4</span>); </span></code>
以上就介紹了PHP7之Closure::call,包括了closure,php7方面的內容,希望對PHP教學有興趣的朋友有幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

php7.0安裝mongo擴充的方法:1、建立mongodb使用者群組和使用者;2、下載mongodb原始碼包,並將原始碼包放到“/usr/local/src/”目錄下;3、進入“src/”目錄;4、解壓縮原始碼包;5、建立mongodb檔案目錄;6、將檔案複製到「mongodb/」目錄;7、建立mongodb設定檔並修改設定即可。

在php5中,我們可以使用fsockopen()函數來偵測TCP埠。這個函數可以用來開啟一個網路連接和進行一些網路通訊。但是在php7中,fsockopen()函數可能會遇到一些問題,例如無法開啟連接埠、無法連接到伺服器等。為了解決這個問題,我們可以使用socket_create()函數和socket_connect()函數來偵測TCP埠。

解決 PHP 7.0 中插件未顯示已安裝問題的方法:檢查插件配置並啟用插件。重新啟動 PHP 以套用配置變更。檢查插件檔案權限,確保其正確。安裝遺失的依賴項,以確保插件正常運作。如果其他步驟都失敗,則重建 PHP。其他可能原因包括外掛程式版本不相容、載入錯誤版本或 PHP 配置問題。

PHP伺服器環境常見的解決方法包括:確保已安裝正確的PHP版本和已複製相關檔案到模組目錄。暫時或永久停用SELinux。檢查並配置PHP.ini,確保已新增必要的擴充功能和進行正確設定。啟動或重新啟動PHP-FPM服務。檢查DNS設定是否有解析問題。

php7.0安裝部署的方法:1、到PHP官網下載與本機系統對應的安裝版本;2、將下載的zip檔案解壓縮到指定目錄;3、開啟命令列窗口,在「E:\php7」目錄下運行“php -v”命令即可。

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

在Docker環境中使用PECL安裝擴展時報錯的原因及解決方法在使用Docker環境時,我們常常會遇到一些令人頭疼的問�...

PHP8相較於PHP7在效能、新特性和語法改進、型別系統、錯誤處理和擴充等方面都有一些優勢和改進。然而,選擇使用哪個版本要根據特定的需求和專案情況來決定。詳細介紹:1、效能提升,PHP8引進了Just-in-Time(JIT)編譯器,可以提高程式碼的執行速度;2、新特性和語法改進,PHP8支援命名參數和可選參數的聲明,使得函數呼叫更加靈活;引入了匿名類別、屬性的類型聲明等等。
