2011-12-27 75 views
1

我有以下功能:我该如何压缩此声明?

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

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

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

有没有办法凝聚这种说法让我不必分配$ var-> myFunction()到第二个变量(在本例中为$ varr)?

+0

如果你传递数组的索引'myFunction的()',并让它返回 – 2011-12-27 17:22:50

+0

发问者想了解的东西在OOP,而不是一个基本的编程问题。 – 2011-12-27 17:40:40

回答

2

PHP不作为Tim Cooper already highlighted支持这个很好(如PHP 5.3的)。所以你需要三思,如果你真的需要这个压缩。

您可以非常动态地执行操作,例如通过返回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]); 

但我不知道这是在应用程序中非常有用。为什么要压缩代码,然后你自己决定

因此,检查你的动机。

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); 
+0

hmmmm。我坚持诉5.2版。它看起来像我将不得不等待,直到5.4稳定出来......无良! – 2011-12-27 17:29:48

+0

@ user522962:我刚添加了另一个可能的解决方案到我的答案 – 2011-12-27 17:32:23

+0

downvote的任何理由? – 2011-12-27 17:35:15