ホームページ > バックエンド開発 > PHPチュートリアル > PHP でチェーン操作を実装する 3 つの方法

PHP でチェーン操作を実装する 3 つの方法

藏色散人
リリース: 2023-04-07 13:12:02
転載
3153 人が閲覧しました

php には多くの文字列関数があります。たとえば、最初に文字列の末尾のスペースをフィルタリングしてから、その長さを調べる必要があります。一般的な書き方は次のとおりです:

strlen(trim($str))
ログイン後にコピー

If you例えば ​​js と同様のチェーン操作を実装したいのですが、次のように書けばよいでしょうか?

$str->trim()->strlen()
ログイン後にコピー

以下は 3 つの方法で実装されます:

方法 1. マジック関数 __call を call_user_func と組み合わせて使用​​し、

アイデアを実現します: 最初に A を定義します。文字列クラス StringHelper では、コンストラクターが値を直接割り当ててから、trim() 関数と strlen() 関数をチェーンで呼び出します。呼び出し関係は、呼び出されたマジック関数 __call() の call_user_func を使用して処理されます。実装は次のとおりです:

<?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(&#39;0&#39;)->strlen();
ログイン後にコピー

ターミナル実行スクリプト:

php test.php 
8
ログイン後にコピー

方法 2. マジック関数 __call と call_user_func_array を組み合わせて使用​​し、

<?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(&#39;0&#39;)->strlen();
ログイン後にコピー

手順:

array_unshift(array,value1,value2,value3...)
ログイン後にコピー

array_unshift( ) 関数は、配列に新しい要素を挿入するために使用されます。新しい配列の値は配列の先頭に挿入されます。

call_user_func() と call_user_func_array はどちらも関数を動的に呼び出すメソッドですが、違いはパラメータの受け渡し方法にあります。

方法 3、これを実現するためにマジック関数 __call を使用しないでください。

_call() を trim() 関数に変更するだけです。

public function trim($t)
{
    $this->value = trim($this->value, $t);
    return $this;
}
ログイン後にコピー

キーポイントは、後者の関数の呼び出しを容易にするために $this ポインターを返すことです。

推奨: 「PHP ビデオ チュートリアル

以上がPHP でチェーン操作を実装する 3 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート