我有以下功能:
<?php
class Test{
function myFunction(){
return array('first','second','third');
}
}
?>
我可以打印出数组的元素:
$var=new Test();
$varr=$var->myFunction();
print($varr[1]);
有没有办法压缩这个语句所以我不必将$ var-&gt; myFunction()分配给第二个变量(在这种情况下是$ varr)?
答案 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]);
但我不知道这在申请中是否真的有用。
请检查您的动机,为什么要压缩代码,然后自行决定。