【问题标题】:Accessing an array element when returning from a function从函数返回时访问数组元素
【发布时间】:2011-04-08 05:40:39
【问题描述】:

通过 Google 进行的一些搜索(以及我自己的经验)表明,在 PHP 中,当从同一行的函数调用返回时,您无法获取数组元素。例如,你不能这样做:

echo getArray()[0];

但是,我遇到了一个巧妙的小技巧:

echo ${!${false}=getArray()}[0];

它确实有效。问题是,我不知道 为什么 它有效。如果有人能解释一下,那就太好了。

谢谢。

【问题讨论】:

  • 它确实不会使您的代码更具可读性;)

标签: php arrays function indexing return


【解决方案1】:
echo ${!${false}=getArray()}[0];

这就是它的工作原理,一步一步

${false}=getArray()

将 getArray 的结果分配给具有空名称的变量('' 或 null 将起作用,而不是 false)

!${false}=getArray()

否定上面的值,把它变成布尔假

 ${!${false}=getArray()}

将先前的(假)值转换为(空)字符串,并将此字符串用作变量名。也就是说,这是步骤 1 中的变量,等于 getArray 的结果。

${!${false}=getArray()}[0];

获取那个“空”变量的索引并返回一个数组元素。

同一想法的更多变体

echo ${1|${1}=getArray()}[1];
echo ${''.$Array=getArray()}[1];

function p(&$a, $b) { $a = $b; return '_'; }
echo ${p($_, getArray())}[1];

至于getArray()[0]为什么不起作用,这是因为php团队不知道如何让它起作用。

【讨论】:

    【解决方案2】:

    之所以有效,是因为您使用大括号将值转换为变量,这是一个示例。

    $hello = 'test';
    echo ${"hello"};
    

    为什么需要这个,需要这个包你想把一个字符串或者返回值变成一个变量,例子

    ${$_GET['var']} = true;
    

    这是一种不好的做法,永远不应该在 IMO 中使用。

    如果你想直接运行函数,你应该使用对象,例如

    function test()
    {
       $object = new stdClass();
       $object->name = 'Robert';
    
       return $object;
    }
    echo test()->name;
    

    【讨论】:

      【解决方案3】:

      应该注意,您可以从 PHP 5.4 开始执行此操作。来自数组取消引用的手册:

      从 PHP 5.4 开始,可以直接对函数或方法调用的结果进行数组取消引用。以前只能使用临时变量。

      例子:

      function theArray() {
          return range(1, 10);
      }
      
      echo theArray()[0];
      // PHP 5.4+: 1
      // PHP -5.4: null
      

      PHP 5.4 之前:尝试访问尚未定义的数组键与访问任何其他未定义变量相同:将发出 E_NOTICE 级别的错误消息,结果将为 NULL。

      手动:

      【讨论】:

        猜你喜欢
        • 2012-06-05
        • 2011-08-07
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-11
        • 1970-01-01
        相关资源
        最近更新 更多