ホームページ  >  記事  >  バックエンド開発  >  PHPチェーンコールを実装するにはどうすればよいですか?

PHPチェーンコールを実装するにはどうすればよいですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-06-30 15:49:203251ブラウズ

PHP でチェーン コールを実装する方法: 1. マジック関数 [_call] と [call_user_func] を組み合わせて実装します; 2. マジック関数 [_call] と [call_user_func_array] を組み合わせて実装します; 3. 使用しないでください魔法の関数【_call】を使って実現します。

PHPチェーンコールを実装するにはどうすればよいですか?

PHP チェーン コールの実装方法:

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

のアイデアを実現します。最初に文字列クラス 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、マジック関数 __callcall_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チェーンコールを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。