简单说说PHP类方法的链式调用

是谁来自山川湖海,却囿于昼夜、厨房与爱。
### 举个例子 如果你使用过PHP的框架,你应该使用过此类代码: 如在laravel框架中:
1
DB::table('xx')->select('xxxx')->where('xxxx','=','xx')->orderBy('xx','desc')->get();
在CI(codeigniter)框架中:
1
$res =$this->db->from('blogs')->select('*')->join('comments', 'comments.id = blogs.id')->get();
### 创建链式方法 如果我们有这么一个类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
class test
{
public $var = array();

public function setName($name)
{

$this->var['name'] = $name;
}

public function setYear($year)
{
$this->var['year'] = $year;
}

public function getVar()
{

return $this->var;
}
}

$test = new test();
那么只需要在相应的方法后添加 return $this,就可以了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class test
{
public $var = array();

public function setName($name)
{
$this->var['name'] = $name;
return $this;
}

public function setYear($year)
{
$this->var['year'] = $year;
return $this;
}

public function getVar()
{
return $this->var;
}
}
调用时:
1
2
$test = new test();
var_dump($test->setName('fc')->setYear('23')->getVar());
这种技术虽然不会让你的PHP代码在本质上发生变化(如性能),但可使你的代码看起来更整洁,并且更容易维护。

静态方法(static)如何处理

要让静态方法也能使用链式调用,只需要加入 return new self

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class test2
{
public static $var = array();
public static function setName($name)
{
self::$var['name'] = $name;
return new self;
}

public static function getVar()
{
return self::$var;
}
}

http://fc-lamp.blog.163.com/blog/static/1745666872013106111248929/