PHP-Kettenschreiben ist „$tree->setAge()->setID()->setName();“, wobei in der PHP-Klasse dieser Zeiger auf die Klasse/das Objekt selbst zeigt, er ist wie ein Seil handle Klassen/Objekte sind mit den Attributen und Funktionen der Klasse verbunden.
Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP Version 7.1, DELL G3-Computer
Die Kettenschreibmethode existiert in vielen objektorientierten Programmiersprachen dass es sich tatsächlich um eine verknüpfte Liste handelt Sehr vertraut mit der Verwendung verknüpfter Listen. Der This-Zeiger ist die Grundlage verketteter Operationen.
Dieser Zeiger hat in verschiedenen Programmiersprachen ähnliche Funktionen, die spezifischen Details sind jedoch unterschiedlich. Aber es gibt eine Grundlage für den Verweis auf das Objekt/die Funktion/die Klasse selbst. Auf dieser Basis kann Chain Writing implementiert werden.
Nehmen Sie PHP als Beispiel.
In einer PHP-Klasse zeigt der This-Zeiger ($this) auf die Klasse/das Objekt selbst. Er ist wie ein Seil, das die Klasse/das Objekt mit den Attributen und Funktionen der Klasse verbindet. Und Sie können damit die entsprechenden Eigenschaften und Funktionen (Methoden) aufrufen. Wie in der Abbildung unten gezeigt:
Demo des PHP-Programms:
<?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);//在打印看链式写法是否有效 ?>
Ausgabeergebnis:
In der obigen Demo wird mithilfe der PHP-Klasse ein Baum mit ID, Name und Alter erstellt. Initialisieren Sie Eigenschaften mit der Initialisierungsfunktion init. Weisen Sie dann den Attributen durch Kettenschreiben Werte zu und drucken Sie schließlich das Ergebnis aus, um zu überprüfen, ob es erfolgreich ist.
Die Voraussetzung dafür, dass Funktionen/Methoden das Schreiben von Ketten implementieren können, ist, dass der Rückgabewert dieser Zeiger ist (gibt $this in PHP zurück, gibt dies in js zurück und ähnliches in anderen Sprachen). Nur auf diese Weise kann der Zeiger „this“ nach dem Aufruf dieser Funktion zurückgegeben werden. Logischerweise wird zu diesem Zeitpunkt die Klasse selbst zurückgegeben, und dann wird die Funktion weiterhin aufgerufen und der Zeiger „this“ zurückgegeben, und so weiter.
Natürlich hat jede Programmiersprache ihre Unterschiede, zum Beispiel ist c++ ->, php-> und js oder jq ist...; das Prinzip ist dasselbe.
Eine Sache: Es gibt diesen Zeiger, diesen Zeiger zurückgeben, und dann können Sie das Kettenschreiben implementieren und zyklisch verwenden ->fun1(dies zurückgeben)->fun2(dies zurückgeben)->fun3(dies zurückgeben )... .
Das obige ist der detaillierte Inhalt vonWas ist PHP-Chain-Schreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!