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

我已经查看了这个错误,我很确定我知道它的含义,但是我不明白我的代码有什么问题导致这个警告。

4

3 回答 3

20

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

$taxonomy_term = taxonomy_get_term_by_name($lead_type, $vocabulary);
$taxonomy_term = reset($taxonomy_term );
于 2012-12-04T08:47:32.093 回答
10

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

reset($array_variable); // correct

reset(some_function_that_returns_array()); // incorrect

如果您花点时间仔细考虑一下-您会发现reset()with 表达式(不是变量)没有意义,因为您已将数组指针倒回到开头,但您无法访问该数组了。

于 2012-12-04T08:46:29.480 回答
2

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

于 2012-12-04T08:48:11.080 回答