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

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

藏色散人
藏色散人転載
2019-09-26 09:24:253158ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。