链式操作的格式是:$obj->(方法或属性)->(方法或属性)->(方法或属性)...方法或属性一般都是类中定义的函数。下面是一个事例:
<html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php class Student{ private $name; private $age; public function setName($name){ $this->name=$name; return $this; //重中之重,一定要返回$this } public function setAge($age){ $this->age=$age; return $this; } public function getName(){ return $this->name; } public function getAge(){ return $this->age; } } $stu=new Student(); echo $stu->setName("Jane")->setAge(20)->getAge(); //输出的时候只能输出一个值 class Person{ public $stu; public function setStu(){ $this->stu=new Student(); return $this; } public function getStu(){ return $this->stu; } } $per=new Person(); echo $per->setStu()->getStu()->setName("Jenny")->setAge(18)->getAge(); //必须先setStu(),然后必须要getStu()后才能后续的函数 ?> </body> </html>
我觉得链式操作的主要重点在于 ‘return $this;'明确$this代表的是什么,答案是:返回当前类的对象。
开始比较困惑的是上面在进行链式操作输出的时候,为什么不能同时输出getName()和getAge().一旦写在一起,就会提示"Fatal error: Call to a member function getAge() on a non-object",非得分开写才行。
后来想通了,链式操作其实就是在上一步完成的前提下,对于上一步返回的值或者类进行操作。比如上面的echo $stu->setName("Jane")->setAge(20)->getAge();首先是调用$stu类当中的setName()进行赋值,现在假设赋值成功后,不返回$this,那么下一步调用setAge()就会出错,Fatal error: Call to a member function setAge() on a non-object in...,原因是setAge()没有操作对象,所以setName()必须有return $this,而且setAge()也必须有return $this,否则后面的函数将因为没有操作对象而出错。