我有一个班级:
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));
我已经查看了错误,我很确定我知道这意味着什么,但我无法理解导致此警告的代码有什么问题。
答案 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