2012-12-04 72 views
4

傳遞我有一個類:只有變量應參考

class Validator { 
    private $validationArray; 
    private $cleanedValues; 

    public function __construct($arg1, $arg2=NULL) { 
     if(empty($arg2)) { 
      $this->LoadValidatorByName($arg1); 
     } else { 
      $this->LoadValidatorFromLeadType($arg1, $arg2); 
     } 
    } 

    private function LoadValidatorFromLeadType($lead_type, $vocabulary) { 
      $ErrorReporter = new ErrorReporter; 
      $taxonomy_term = reset(taxonomy_get_term_by_name($lead_type, $vocabulary)); 

...some more stuff 

功能taxonomy_get_term_by_name是一個Drupal的功能,但我遇到的問題是一個PHP的。

當這個方法被調用PHP抱怨有:

Strict warning: Only variables should be passed by reference in Validator->LoadValidatorFromLeadType() (line 32 of [path to my file]) 

線32與部份行:

$taxonomy_term = reset(taxonomy_get_term_by_name($lead_type, $vocabulary)); 

我看了到錯誤,我敢肯定,我知道這意味着什麼,但我無法理解導致此警告的代碼有什麼問題。

回答

12

重置正在等待變量引用。您正在向它傳遞函數結果...

$taxonomy_term = taxonomy_get_term_by_name($lead_type, $vocabulary); 
$taxonomy_term = reset($taxonomy_term); 
+0

標記此爲正確因爲這是我最終做的。 –

8

這意味着只有變量應該通過引用傳遞,而不是表達式。

reset($array_variable); // correct 

reset(some_function_that_returns_array()); // incorrect 

如果您花一秒鐘想想更多的 - 你會發現reset()表達式(不是變量)是沒有意義的,因爲你已經退數組指針到一開始,但你不能再訪問這個數組了。

+0

這就是爲什麼PHP提供自PHP 5.4功能結果數組訪問:'taxonomy_get_term_by_name($ lead_type,$詞彙)[0]' – Sven

+0

@Sven:如果只有你知道的第一個元素的關鍵 – zerkms