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

标签 php language-design language-features

<分区>

为什么我不能这样做?

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

所有其他语言都支持它。

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

我应该了解变量和返回值的行为方式之间是否存在某种差异?

这是设计决定吗?他们只是懒惰吗?语言的构建方式是否有什么使得实现起来极其困难?

最佳答案

Why can't I do this?

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

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

否则,你必须先将返回值赋给一个变量,然后通过索引访问。

更多信息:

So one can chain method calls or property access. Now for a long time people requested the same thing for array offset access. This was often rejected due to uncertainties about memory issues, as we don't like memory leaks. But after proper evaluation Felipe committed the patch which allows you to do things like:

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]

关于php - 为什么我不能在函数的返回值上使用数组索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6216957/

相关文章:

php - 关于 PHP 中具有静态函数和命名空间的类的问题

php - 将mysql中的行数显示到android中的textview中

php - Yii2 调试 mysql 查询或 mysql_error 等效项

php in_array() 或 array_search() 不工作

c++ - 用户定义的转换运算符到不可访问的基类

f# - F# 的 future 路线图

java - 为什么 Java 可变参数不支持集合?

compiler-construction - 有讨论编译器的好地方吗?

java - 运算符重载

c# - 私有(private)在 C++ 和 C# 中意味着不同的东西吗?