首頁 >後端開發 >PHP問題 >php 鍊式寫入法是什麼

php 鍊式寫入法是什麼

藏色散人
藏色散人原創
2021-05-24 09:43:063190瀏覽

php鍊式寫入“$tree->setAge()->setID()->setName();”,其中在php類別中this指標指向類別/物件本身,它就像一個繩子把類別/物件和類別的屬性、函數連接起來。

php 鍊式寫入法是什麼

#本文操作環境:Windows7系統、PHP7.1版,DELL G3電腦

鍊式寫法在許多物件導向的程式語言都存在,個人簡單理解就是鍊錶,確實和鍊錶的使用很相識。 this指標是鍊式操作的基礎。
this指標在不同的程式語言中的功能差不多,具體的小細節不一樣。 但是有一個基礎就是指向物件/函數/類別本身。基於這個基礎就可以實現鍊式寫法。
以php為例。
在php類別中this指標($this)指向類別/物件本身,它就像一個繩子把類別/物件和類別的屬性、函數連接起來。並可以透過​​它來呼叫對應的對應的屬性和函數(方法)。如下圖所示:
php 鍊式寫入法是什麼

php程式的demo:

<?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 鍊式寫入法是什麼

##這上面這個demo中,用php類別建了一棵樹tree,有id和name和age。透過初始化函數init去初始化屬性。然後透過鍊式寫法來給屬性賦值,最後列印結果驗證是否成功。

函數/方法能實作鍊式寫入的前提是回傳值是this指標(php中return $this,js中return this,其他語言也類似)。這樣才能實現調用這個函數後返回this指針,衝邏輯來說,此時返回的是類別本身,然後接著繼續調用函數,又返回this指針,如此循環。
當然各個程式語言有不同的地方,例如c 是->,php->,而js或jq則是. ;調用的形式不同但是原理一樣。

一點,有this指針,回傳this指針,然後就能實現鍊式寫法並能循環使用->fun1(return this)->fun2(return this )->fun3 (return this)…… 。

以上是php 鍊式寫入法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn