注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

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

2013-11-06 11:34:18|  分类: Web技术-Php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
如果你使用过PHP的框架,你应该使用过此类代码:
如在laravel框架中:

$res = DB::table('xx')->select('xxxx')->where('xxxx','=','xx')->orderBy('xx','desc')->get();

在CI(codeigniter)框架中:

$res =$this->db->from('blogs')->select('*')->join('comments', 'comments.id = blogs.id')->get();

以上这种方式就是PHP链式方法。

那么如何创建链式方法呐?
如果我们有这么一个类:

<?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,就可以了。

<?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;
}
}

调用时:

$test = new test();
var_dump($test->setName('fc')->setYear('23')->getVar());

这种技术虽然不会让你的PHP代码在本质上发生变化(如性能),但可使你的代码看起来更整洁,并且更容易维护。

静态方法(static)如何处理?
像下面的说的:

class test2
{
public static $var = array();
public static function setName($name)
{
self::$var['name'] = $name;
}

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

如查调用时:

test2::setName('fc')->getVar()

这样是行不通的,那么要让静态方法也能使用链式调用,只需要加入 return new self;

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;
}
}

这样就行了。

  评论这张
 
阅读(897)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017