只应通过引用传递变量

时间:2012-12-04 08:44:25

标签: 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

函数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));

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

3 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:10)

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

reset($array_variable); // correct

reset(some_function_that_returns_array()); // incorrect

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

答案 2 :(得分:2)

您应该只重置一个变量(通过引用传递),而不是函数的返回值。 见:http://www.php.net/reset