只应通过引用传递变量

Cam*_*all 5 php class

我有一节课:

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
Run Code Online (Sandbox Code Playgroud)

函数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])
Run Code Online (Sandbox Code Playgroud)

第32行是:

$taxonomy_term = reset(taxonomy_get_term_by_name($lead_type, $vocabulary));
Run Code Online (Sandbox Code Playgroud)

我已经查看了错误,我很确定我知道这意味着什么,但我无法理解导致此警告的代码有什么问题.

Sal*_*ter 18

reset正在等待变量引用.你正在传递一个函数结果......

$taxonomy_term = taxonomy_get_term_by_name($lead_type, $vocabulary);
$taxonomy_term = reset($taxonomy_term );
Run Code Online (Sandbox Code Playgroud)


zer*_*kms 10

这意味着只应通过引用传递变量,而不是表达式.

reset($array_variable); // correct
Run Code Online (Sandbox Code Playgroud)

reset(some_function_that_returns_array()); // incorrect
Run Code Online (Sandbox Code Playgroud)

如果你花一点时间再考虑一下 - 你会发现reset()表达式(不是一个变量)是没有意义的,因为你已经将数组指针倒回到开头,但是你没有能力访问那个数组了.