之前(由于太鸡冻而写的心得记录,《看了Go Lang 的一点介绍, 我心动了》),当时被Go语言的多值返回的便利性感动到流涕,因为这个特性确实给予了我们太多的方便和实惠,所以说Go语言是如此的紧贴工程实践呢。而PHP虽然在语言上并没有直接支持多只返回,但是却提供了一个语言结构这样的奇葩存在来赋值。
在php中,类似的语法需要 array配合 list 这个语言结构来实现。 点击这里查看官方手册对list的用法说明。
官方是这样描述list的用途的:
arraylist($varname[,] )
废话不多说,举个栗子:
//e.g (1)
list($succ, $code, $data) = array(true, 0, array(1,2,3));
//$succ : true
//$code : 0
//$data : array(1,2,3)
上面的例子,很简单,就是把array的每一个元素一次性赋值给list里面的变量。
回到这篇文章的开头,和Go语言相比,PHP如何实现多值返回呢?相信如果看到这里的你,也应该清楚了。:-D,如果非要我来个栗子,好吧,上代码:
//假如我们查数据库,获取用户信息
function get_user_info($uid){
//some code get userinfo from db.
try{
$userinfo = Db::get_one(array('uid'=>$uid));
$result = array(true, 0, $userinfo);
} catch (\Exception $e){
$result = array(false, $e->getCode(), $e->getMessage());
}
return $result;
}
list($succ, $code , $data) = get_user_info(20);
if ($succ){
//some thing
var_dump($data);
}else{
Logger::writeErrorLog($data,$code);
echo $data;//error message
}
各种语言都有自己的特点,虽说没有go语言那么简洁,但终究是也是一个比较方便的设施。随着PHP不断的演变,我们开发也随之改变,其实这句话是错误的!因为PHP始终遵循着最佳实践的路子在往前走,所以才有了语言特性的变化,有精力的可以去看看PHP特性RFC,这里都是根据实际应用场景来提交并投票决定是否开发的。希望她越来越好,为什么不呢?