链式操作的格式是:$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,否则后面的函数将因为没有操作对象而出错。