この記事の動作環境:Windows 7系、PHPバージョン7.1 、DELL G3 コンピュータチェーン記述メソッドは多くのオブジェクト指向プログラミング言語に存在しますが、個人的には単純にリンク リストとして理解していますが、実際、リンク リストの使用には非常に精通しています。 this ポインタは連鎖操作の基礎です。php チェーンの書き込みメソッドは "$tree->setAge()->setID()->setName();" です。php クラスでは、このポインターはクラス/オブジェクト自体を指します。それは、クラス/オブジェクトをクラスの属性や関数に接続するロープのようなものです。
このポインターはさまざまなプログラミング言語でも同様の機能を持っていますが、具体的な詳細は異なります。
しかし、オブジェクト/関数/クラス自体を指すための基礎があります。これに基づいて、チェーン書き込みを実装できます。 php を例に挙げます。
PHP クラスでは、this ポインタ ($this) はクラス/オブジェクト自体を指し、クラス/オブジェクトとクラスの属性や関数を結ぶロープのようなものです。そして、それを使用して、対応するプロパティと関数 (メソッド) を呼び出すことができます。以下に示すように:
<?php /** * Created by PhpStorm. * User: dell * Date: 2017/3/31 * Time: 21:42 */ /* *注释的规范写法:@param [参数类型] 参数名 参数解释 * @return 返回值 [类型] 返回值名 返回值说明 */ class Tree{ private $id ; private $name; private $age; /* * * @param null * @return null * */ public function _construct() { //构造函数 } /* * * @param [array] $arr 参数1 * @return null * */ public function init( $arr = array() ) { //初始化函数 $arrs = array(); //设置默认参数 $arrs = [ 'id'=> 1, 'name'=> 'user', 'age' => 18 ]; if( !(is_array($arr)) ) { //如果传进来的数据不是数组则默认是id $this->id = intval( $arr ); } $arrs = array_merge( $arrs , $arr );//合并数组 //给类的属性赋值 $this->id = $arrs['id']; $this->name = $arrs['name']; $this->age = $arrs['age']; } /* * * @param [int] $data 参数1 * @return $this * */ public function setID( $data = 0 ) { //判断是不是数字 $this->id =is_numeric( $data )? $data : intval($data) ;//判断是否是数字,是赋值,否则转为数字在赋值 return $this;//返回this指针 } /* * * @param [string] $data 参数1 * @return $this * */ public function setName( $data = 'user' ) { //判断是不是数字 $this->name =is_string( $data )? $data : strval($data) ;//判断是否是字符串,是赋值,否则转为字符串在赋值 return $this;//返回this指针 } /* * * @param [int] data 参数1 * @return $this * */ public function setAge( $data = 18 ) { //判断是不是数字 $this->age =is_numeric( $data )? $data : intval($data) ;//判断是否是数字,是赋值,否则转为数字在赋值 return $this;//返回this指针 } }; $tree = new Tree(); $array = array(); $array['id'] = 10; $array['name'] = 'admin'; $array['age'] = 20; $tree->init($array); var_dump($tree);//打印结果 $tree->setAge()->setID()->setName();//链式写法 var_dump($tree);//在打印看链式写法是否有效 ?>出力結果: これは上記のものです。デモでは、PHP クラスを使用して、ID、名前、年齢を含むツリーが構築されます。初期化関数 init を使用してプロパティを初期化します。次にチェーン書き込みで属性に値を割り当て、最後に結果を出力して成功したかどうかを確認します。
関数/メソッドがチェーン書き込みを実装できるという前提は、戻り値がこのポインターであることです (php では $this を返し、js では this を返し、他の言語でも同様です)。この方法でのみ、この関数を呼び出した後に this ポインタを返すことができます。論理的に言えば、この時点で返されるのはクラス自体であり、引き続き関数を呼び出して this ポインタを返す、ということになります。
もちろん、それぞれのプログラミング言語には違いがあり、例えば c は ->、php->、js や jq は...など、呼び出し形式は異なりますが原理は同じです。
1 点、このポインタがあって、このポインタを返すと、チェーン書き込みが実装でき、循環的に使用できます ->fun1(return this)->fun2(return this)- >fun3 (これを返す)…… 。
以上がPHPチェーンライティングとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。