【问题标题】:Why can't I use an array index on the return value of a function? [closed]为什么我不能在函数的返回值上使用数组索引? [关闭]
【发布时间】:2011-09-07 04:48:09
【问题描述】:

为什么我不能这样做?

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

所有其他语言都支持它。

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

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

这是一个设计决定吗?他们只是懒惰吗?语言的构建方式是否有一些东西使得它非常难以实现?

【问题讨论】:

  • 因为语言解析器不支持。 PHP 5.4 可能会添加它。 -- 在那之前,还有a few fiddly workarounds
  • “其他所有语言”,嗯?无论如何,这个“问题”实际上只是一个咆哮。你知道这是不可能的,所以这个问题没有有用的答案。
  • @Tomalak:不是这样。我对 PHP 及其工作原理可能存在根本性的误解。例如,它可能会返回与我预期不同的东西;变量的行为方式和返回值的行为方式之间可能存在一些差异。
  • 在 imo 上的咆哮似乎并没有那么糟糕。如果它将在较新版本的 PHP 中实现,这可能是一个不错的功能。 (new Obj())->method(); 也一样
  • 这个问题经过编辑以提供澄清,因此可能不再需要早期的接近投票(包括我的)。我正在投票重新开放。

标签: php language-design language-features


【解决方案1】:

为什么我不能这样做?

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

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

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

更多信息

因此可以链接方法调用或 财产访问。现在很长一段时间 人们要求同样的事情 数组偏移访问。 这通常是 由于不确定性而被拒绝 内存问题,因为我们不喜欢 内存泄漏。但是经过适当的 评价 Felipe 提交的补丁 这使您可以执行以下操作:

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 目前不支持这种语法。”
  • 我没有对你投反对票,但是......“不支持它”并不是我真正想要的答案。 为什么?这是一个设计决定吗?他们只是懒惰吗?语言的构建方式是否有一些东西使得它难以实现?
  • 很好。我会添加更多信息。
【解决方案2】:

分解返回一个数组,而不是引用。

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

【讨论】:

  • 我不明白...数组支持[] 语法,那么为什么不这样做呢?
  • 即使它返回了一个引用,仍然不支持该语法。参考与它无关。
  • 我认为 php 说,$tab 它还不是一个数组
【解决方案3】:

在我的框架中,我编写了一个函数来处理所有可能的数组:

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

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

【讨论】:

    【解决方案4】:

    你也可以考虑....

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

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

    【讨论】:

      【解决方案5】:
      $pieces = explode(',','1,2,3', 1);
      

      将第一个索引用于:

      $pieces[0];
      

      【讨论】:

      • 是的...我不是在寻求解决方法,只是想知道为什么它不受支持。
      猜你喜欢
      • 2023-01-07
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      相关资源
      最近更新 更多