2011-12-27 114 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