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