2012-12-04 47 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