为什么我不能在函数的返回值上使用数组索引?

时间:2011-06-02 15:54:49

标签: php language-design language-features

为什么我不能这样做?

explode(',','1,2,3', 1)[0]

其他语言都支持它。

我正在寻找答案:(因为人们似乎认为这是毫无意义的咆哮)

变量和返回值的行为方式之间是否存在某种差异?我应该注意这一点?

这是一个设计决定吗?他们只是懒惰吗?有没有关于语言的构建方式,这使得这非常难以实现?

5 个答案:

答案 0 :(得分:7)

  

为什么我不能这样做?

因为PHP目前不支持这种语法。但是你可以把它传递给一个函数,例如:

current(explode(',','1,2,3', 1));

否则,您必须先将返回值分配给变量,然后通过索引进行访问。

更多信息

  

所以可以链接方法调用或   财产访问。现在很久了   人们要求同样的事情   数组偏移访问。 经常这样   由于不确定性而被拒绝   记忆问题,因为我们不喜欢   内存泄漏。但经过适当的准备   评估费利佩承诺补丁   这允许你做以下事情:

function foo() {
    return array(1, 2, 3);
}
echo foo()[2]; // prints 3

http://schlueters.de/blog/archives/138-Features-in-PHP-trunk-Array-dereferencing.html

因此,它正处于开发流程中,但正如我所说,目前尚不支持。

更新

PHP> = 5.4 now supports函数数组解除引用,例如foo()[0]

答案 1 :(得分:2)

在我的框架中,我编写了一个函数,可以使用所有可能的数组来完成它:

function elem($array,$key) {
  return $array[$key];
}

//> usage 
echo elem($whateverArrayHere,'key');
echo elem(explode(),1);

答案 2 :(得分:1)

爆炸返回一个数组,而不是引用。

$tab = explode (',','1,2,3', 1);
$tab[0] = ','

答案 3 :(得分:0)

您也可以考虑....

  list($value_I_want_to_keep)=explode(',','1,2,3', 1);

  $value_I_want_to_keep=strtok('1,2,3',',');

答案 4 :(得分:0)

$pieces = explode(',','1,2,3', 1);

将第一个索引用于:

$pieces[0];