首先, 这个标题我不太清楚怎么翻译才能表达确切的意思, 直译不太妥当.
在PHP5.4中, 有一个新的改进:
- Added array dereferencing support. (Felipe)
在以前, 我们如果定义一个返回数组的函数:
<?php function foo() { return array(1, 2, 3); }
那么, 如果我要获取返回数组中的第二个元素, 就只能:
<?php list(, $mid, ) = foo();
或者:
$tmp = $foo(); $mid = $tmp[1];
而从5.4开始, 我们就不需要这么麻烦了, 只需要:
<?php $mid = foo()[1];
另外, 也可以使用引用:
<?php function &getTable() { return $GLOBALS; } getTable()["foo"] = "laruence"; echo $foo; //laruence
很方便吧? 呵呵. 最后提醒一下, PHP 5.4还处于开发阶段, 在最终release之前, 任何新特性都可能被调整或者更改. 如果大家有任何建议, 也欢迎反馈, 帮助我们使得PHP变得更好.
谢谢
Comments
- 2011/10/10, Demon writes: 加Q交个朋友~PHPer.
- 2011/10/10, Demon writes: 忘写Q了 = = [防止spam已保护性隐藏]
Sina weibo http://weibo.com/lonedemon - 2011/10/10, 飞晏 writes: 这样确实可以省一个变量的功夫。
只取一个元素这样用最方便,取多个元素(不一定是全部)就不能这样了吧。 - 2011/10/10, wynn writes: 个人认为在这个语境下,“dereferencing”可以翻译成“成员访问解析”。这个更新的内容可以翻译成“增加了数组成员访问解析支持”。(实际上完整的说在最前面应该加上“对函数返回结果”的定语)
翻PHP的过往的一些信息,可以看出“dereferencing”这个字眼大致上是指“对(尝试)访问对象的属性(的语法)的解析”,也就是指诸如“->property” 这样的语法。
在5.3上,可以运行下面几个代码:
//代码1:对变量
$obj = new stdClass();
$obj->a = ‘string_a’;
echo $obj->a;//代码2:对数组元素
$array[‘a’] = new StdClass();
$array[‘a’]->a = ‘string_a’;
echo $array[‘a’]->a;//代码3:对函数返回结果
function test(){
$obj = new stdClass();
$obj->a = ‘string_a’;
return $obj;
}
echo test()->a;在所有这3种情况下,“->”操作都会尝试把之前的结果作为目标object,解析属性访问。而对于数组,只有前两种情况是允许的:
//代码1:对变量
$arr = array();
$arr[‘a’] = ‘string_a’;
echo $arr[‘a’];//代码2:对数组元素
$array[‘a’] = array();
$array[‘a’][‘a’] = ‘string_a’;
echo $array[‘a’][‘a’];//代码3:对函数返回结果,出错。
function test(){
$array = array();
$array[‘a’] = ‘string_a’;
return $array;
}
echo test()[‘a’];实际上如果不考虑对象的方法,只关注数据的话,对象和数组都可以当作hash表来看,二者之间很相似,那么对函数返回结果不能直接执行数组成员访问,就有点歧视的感觉……
这个新特性实际上就是把这个缺陷补上。
对象内的数据叫“属性”,数组内的数据叫“元素”,个人认为可以统一用“成员”来称呼,来体现这种关联性。 - 2011/10/11, Snakevil writes: 我觉得“dereferencing”翻译成“反向引用”不错。“de-”前缀词根也可以做“反向”来理解。
- 2011/10/25, diyism writes: dereference的意思:c语言里的*就是个”解除引用运算符”, *aPointer就是对aPointer解除引用以获得实体
- 2011/10/27, Wilson writes: 一直期待着php能像js那样用数组呢,没想到现在支持了,真开心啊,return_array()[1]
- 2011/11/01, GAN writes: 这个确实方便许多啊
- 2011/11/19, Tim writes: 在Perl中,这个叫数组切片.
Related posts:
Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)
Related Posts:
转载请注明:爱开源 » Array dereferencing