PHP 三種方式實作鍊式操作
在php中有很多字串函數,例如要先過濾字串收尾的空格,再求出其長度,一般的寫法是:
strlen(trim($str))
如果要實現類似js中的鍊式操作,比如像下面這樣應該怎麼寫?
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$str->trim()->strlen()</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>下面分別用三種方式來實現:
方法一、使用魔法函數__call
結合call_user_func
來實作
思想:函數首先定義一個定義值,然後鍊式呼叫trim()
和strlen()
函數,透過在呼叫的魔法函數__call()
中使用call_user_func
來處理終端關係,實作如下:<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><?php
class StringHelper
{
private $value;
function __construct($value)
{
$this->value = $value;
}
function __call($function, $args){
$this->value = call_user_func($function, $this->value, $args[0]);
return $this;
}
function strlen() {
return strlen($this->value);
}
}
$str = new StringHelper(" sd f 0");
echo $str->trim('0')->strlen();</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">php test.php
8</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>
方法二、使用魔法函數
結合
call_user_func_array來實作<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><?php
class StringHelper
{
private $value;
function __construct($value)
{
$this->value = $value;
}
function __call($function, $args){
array_unshift($args, $this->value);
$this->value = call_user_func_array($function, $args);
return $this;
}
function strlen() {
return strlen($this->value);
}
}
$str = new StringHelper(" sd f 0");
echo $str->trim('0')->strlen();</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>
說明:<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">array_unshift(array,value1,value2,value3...)</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>
array_unshift()說明:
public function trim($t) { $this->value = trim($this->value, $t); return $this; }
array_unshift()
說明:
strlen(trim($str))
array_unshift()
說明:<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$str->trim()->strlen()</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>
新數組的值將插入到數組的開頭。
call_user_func()和call_user_func_array
都是動態呼叫函數的方法,差別在於參數的傳遞方式不同。 方法三、不使用魔法函數
來實現
只需要修改
_call()
trim()
函數即可:<?php class StringHelper { private $value; function __construct($value) { $this->value = $value; } function __call($function, $args){ $this->value = call_user_func($function, $this->value, $args[0]); return $this; } function strlen() { return strlen($this->value); } } $str = new StringHelper(" sd f 0"); echo $str->trim('0')->strlen();
在php中有很多字串函數,例如要先過濾字串收尾的空格,再求出其長度,一般的寫法是:<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">php test.php
8</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>
如果要實現類似js中的鍊式操作,例如像下面這樣該怎麼寫?
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><?php
class StringHelper
{
private $value;
function __construct($value)
{
$this->value = $value;
}
function __call($function, $args){
array_unshift($args, $this->value);
$this->value = call_user_func_array($function, $args);
return $this;
}
function strlen() {
return strlen($this->value);
}
}
$str = new StringHelper(" sd f 0");
echo $str->trim('0')->strlen();</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>
下面分別用三種方式來實現:方法一、使用魔法函數__call
結合call_user_func
來實作思想:
函數首先定義一個定義值,然後鍊式呼叫trim()
和
函數,透過在呼叫的魔法函數
__call()中使用call_user_func
來處理終端關係,實作如下:<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">array_unshift(array,value1,value2,value3...)</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div> public function trim($t)
{
$this->value = trim($this->value, $t);
return $this;
}
登入後複製登入後複製
方法二、使用魔法函數
__callpublic function trim($t) { $this->value = trim($this->value, $t); return $this; }
結合
call_user_func_array來實作rrreee
說明:
array_unshift()
說明:rrreee
說明:rrreee
array_unshift()說明:rrreee
array_unshift()
新數組的值將插入到數組的開頭。
和
call_user_func_array都是動態呼叫函數的方法,差別在於參數的傳遞方式不同。
方法三、不使用魔法函數
__call🎜來實現🎜🎜只需要修改🎜_call()🎜為🎜trim()🎜函數即可:🎜rrreee🎜函數重點,返回$this 。 🎜🎜🎜🎜更多PHP 三種方式實現鍊式操作 相關文章請關注PHP中文網! 🎜🎜🎜
熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

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

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

Dreamweaver CS6
視覺化網頁開發工具

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

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

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

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。
