2012-01-18 115 views
4

我想要做這樣的事情,而無需使用額外的變量:屬性陣列

class className { 
    public static function func(){ 
    return array('true','val2'); 
    } 
} 

if(className::func()[0]) { 
    echo 'doğru'; 
} else { 
    echo 'Yanlış'; 
} 
+4

PHP不支持這種方式的數組解引用。爲什麼你不能使用中間變量? – 2012-01-18 16:29:31

+0

@Felix Kling PHP 5.4將具有以下功能:http://css.dzone.com/polls/what-new-feature-php-54 – feeela 2012-01-18 16:31:43

+0

[訪問函數返回的數組](http:// stackoverflow.com/questions/1664362/),[在PHP中由函數返回的訪問數組](http://stackoverflow.com/questions/1459377/) – outis 2012-01-19 10:51:21

回答

11

className::func()[0]被稱爲數組語法,而不是在所有的PHP版本有效的語法。它 將是 可用於PHP 5.4開始, 目前在2012年3月發佈的測試版 。對於早期的PHP版本,您需要在某處使用額外的變量來存儲從className::func()返回的數組。

查看PHP 5.4 Array documentation的實施細節。

+0

thanx很多答案! – Lupus 2012-01-18 16:49:16

+0

用於擊敗我35秒; – 2012-01-18 16:53:26

7

Array Deferencing目前在PHP中不可用。它在PHP 5.4的桌子上。

在那之前,你將需要額外變量

$arr = className::func(); 
if($arr[0]){ 
    echo 'doğru'; 
}else{ 
    echo 'Yanlış'; 
} 
1

當別人注意,您目前不能做這種方式。如果你真的不能使用臨時變量(雖然我沒有看到一個理由不使用一個),你可以使用

if(current(className::func())) // or next() or reset() 

但要確保你瞭解這些功能的文檔正確對待空數組。

參考current

+0

您不能(或者至少不應該)直接將表達式的結果傳遞給'array_shift()',因爲它通過引用接受輸入數組參數,因爲它修改了輸入陣列。 'current()'也是如此,但是我相信這並不會修改輸入數組。 – DaveRandom 2012-01-18 16:40:38

+0

@DaveRandom:那麼爲什麼要避免呢?但是你是對的,'array_shift'不起作用。 – 2012-01-18 16:43:47

+0

因爲如果你看看文檔,它確實會說(由於某種原因)'current()'把它作爲引用的參數。這個*應該*生成一個'E_STRICT',就像它處理'array_shift()'一樣,儘管我剛剛嘗試過,實際上並不是這樣,所以文檔可能是錯誤的。 – DaveRandom 2012-01-18 16:53:13

2

那麼,你可以在你的方法返回一個對象來代替。 這樣的東西:

class className{ 
     public static function func(){ 
      return (object)array('true'=>'true','val2'=>'val2'); 
     } 
} 

echo className::func()->true;//Extra variables go away =)