我该如何压缩这个陈述?

时间:2011-12-27 17:20:33

标签: php

我有以下功能:

<?php
class Test{
function myFunction(){
   return array('first','second','third'); 
}
}
?>

我可以打印出数组的元素:

$var=new Test();
$varr=$var->myFunction();
print($varr[1]);

有没有办法压缩这个语句所以我不必将$ var-&gt; myFunction()分配给第二个变量(在这种情况下是$ varr)?

2 个答案:

答案 0 :(得分:2)

在PHP 5.4中,您将能够:

$varr=$var->myFunction()[1];

在此之前,使用list可能有所帮助:

list(,$varr) = $var->myFunction();

另一种解决方案是修改您的方法以接受要返回的项目的可选索引:

function myFunction($index = null){
   $arr = array('first','second','third'); 
   return $index == null ? $arr : $arr[$index];
}
$varr = $var->myFunction(1);

答案 1 :(得分:2)

PHP不支持这个(从PHP 5.3开始)Tim Cooper already highlighted。因此,如果你真的需要这种压缩,你需要三思而后行。

你可以非常动态地做事,例如通过返回ArrayObject而不是数组:

class Test
{
    function myFunction()
    {
        return new ArrayObject(array('first','second','third'), 3); 
    }
}

$var = new Test();
print($var->myFunction()->{1});

将使用一些其他方法和访问方法来装饰数组数据。另一种方法是使用函数w / o参数来欺骗PHP解析器并动态提供属性而不是函数:

class Test
{
    function myFunction()
    {
        return array('first','second','third'); 
    }
    public function __get($name)
    {
        return $this->$name();
    }
}

$var = new Test();
print($var->myFunction[1]);

但我不知道这在申请中是否真的有用。

请检查您的动机,为什么要压缩代码,然后自行决定。