PHP & Golang 函数多值返回比较

LXRM · · 2007 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

    之前(由于太鸡冻而写的心得记录,看了Go Lang 的一点介绍, 我心动了),当时被Go语言的多值返回的便利性感动到流涕,因为这个特性确实给予了我们太多的方便和实惠,所以说Go语言是如此的紧贴工程实践呢。而PHP虽然在语言上并没有直接支持多只返回,但是却提供了一个语言结构这样的奇葩存在来赋值。

在php中,类似的语法需要 array配合 list 这个语言结构来实现。  点击这里查看官方手册对list 的用法说明。

官方是这样描述list的用途的:

array list ( mixed $varname [, mixed $... ] )

<像 array() 一样,这不是真正的函数,而是语言结构。list() 用一步操作给一组变量进行赋值。

废话不多说,举个栗子:

<?php
//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,如果非要我来个栗子,好吧,上代码:

<?php
//假如我们查数据库,获取用户信息
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,这里都是根据实际应用场景来提交并投票决定是否开发的。希望她越来越好,为什么不呢?





有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:LXRM

查看原文:PHP & Golang 函数多值返回比较

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2007 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传