只有变量应该通过引用传递

7

我有一个类:

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个回答

21

reset正在等待一个变量的引用,而您却将函数结果传递给它...

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

10

这意味着只有变量应该被传递为引用,而不是表达式。

reset($array_variable); // correct

reset(some_function_that_returns_array()); // incorrect

如果您再花一点时间思考一下,就会发现使用表达式(而不是变量)的 reset() 没有意义,因为您已将数组指针倒回到开头,但您无法再访问该数组。


这就是为什么自 PHP 5.4 起,PHP 在函数结果上提供了数组访问:taxonomy_get_term_by_name($lead_type, $vocabulary)[0] - Sven
@Sven:如果你知道第一个元素的键就好了。 - zerkms

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接