ホームページ >バックエンド開発 >PHPの問題 >PHPチェーンライティングとは何ですか?

PHPチェーンライティングとは何ですか?

藏色散人
藏色散人オリジナル
2021-05-24 09:43:063184ブラウズ

php チェーンの書き込みメソッドは "$tree->setAge()->setID()->setName();" です。php クラスでは、このポインターはクラス/オブジェクト自体を指します。それは、クラス/オブジェクトをクラスの属性や関数に接続するロープのようなものです。

PHPチェーンライティングとは何ですか?

この記事の動作環境:Windows 7系、PHPバージョン7.1 、DELL G3 コンピュータ

チェーン記述メソッドは多くのオブジェクト指向プログラミング言語に存在しますが、個人的には単純にリンク リストとして理解していますが、実際、リンク リストの使用には非常に精通しています。 this ポインタは連鎖操作の基礎です。

このポインターはさまざまなプログラミング言語でも同様の機能を持っていますが、具体的な詳細は異なります。
しかし、オブジェクト/関数/クラス自体を指すための基礎があります。これに基づいて、チェーン書き込みを実装できます。 php を例に挙げます。
PHP クラスでは、this ポインタ ($this) はクラス/オブジェクト自体を指し、クラス/オブジェクトとクラスの属性や関数を結ぶロープのようなものです。そして、それを使用して、対応するプロパティと関数 (メソッド) を呼び出すことができます。以下に示すように:

PHPチェーンライティングとは何ですか?

php プログラムのデモ:

<?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 = [
            &#39;id&#39;=> 1,
            &#39;name&#39;=> &#39;user&#39;,
            &#39;age&#39; => 18
        ];
        if( !(is_array($arr)) )
        {
        //如果传进来的数据不是数组则默认是id
            $this->id = intval( $arr );
        }
        $arrs = array_merge( $arrs , $arr );//合并数组
        //给类的属性赋值
        $this->id = $arrs[&#39;id&#39;];
        $this->name = $arrs[&#39;name&#39;];
        $this->age = $arrs[&#39;age&#39;];
    }
    /*
 *
 * @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 = &#39;user&#39; )
    {
        //判断是不是数字
        $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[&#39;id&#39;] = 10;
$array[&#39;name&#39;] = &#39;admin&#39;;
$array[&#39;age&#39;] = 20;
$tree->init($array);
var_dump($tree);//打印结果
$tree->setAge()->setID()->setName();//链式写法
var_dump($tree);//在打印看链式写法是否有效
?>

出力結果:

PHPチェーンライティングとは何ですか?

これは上記のものです。デモでは、PHP クラスを使用して、ID、名前、年齢を含むツリーが構築されます。初期化関数 init を使用してプロパティを初期化します。次にチェーン書き込みで属性に値を割り当て、最後に結果を出力して成功したかどうかを確認します。

関数/メソッドがチェーン書き込みを実装できるという前提は、戻り値がこのポインターであることです (php では $this を返し、js では this を返し、他の言語でも同様です)。この方法でのみ、この関数を呼び出した後に this ポインタを返すことができます。論理的に言えば、この時点で返されるのはクラス自体であり、引き続き関数を呼び出して this ポインタを返す、ということになります。
もちろん、それぞれのプログラミング言語には違いがあり、例えば c は ->、php->、js や jq は...など、呼び出し形式は異なりますが原理は同じです。

1 点、このポインタがあって、このポインタを返すと、チェーン書き込みが実装でき、循環的に使用できます ->fun1(return this)->fun2(return this)- >fun3 (これを返す)…… 。

以上がPHPチェーンライティングとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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