有没有办法在不使用'call_user_func'而没有使用eval的情况下调用类中的函数?
这就是我问的原因:
当我使用'call_user_func'时,我得到'$ this not in context'错误:
$this->id = $selectId['id'];
$file = 'score_' . $this->sid . '.php'; //the file with the class
if (@include_once($file)) { //including the file
$scoreClass = 'Score_' . $this->id;
call_user_func($scoreClass .'::selectData', $this->user_id);
}
我可以克服这个'不在上下文'错误调用这样的函数: 但现在我的名字不变。
$this->id = $selectId['id'];
$file = 'score_' . $this->sid . '.php'; //the file with the class
if (@include_once($file)) { //including the file
$test = new Score_98673();
$test->selectData($this->user_id);
}
答案 0 :(得分:3)
call_user_func(array($score, 'selectData'), $this->user_id);
这是callable
假型的正确语法
http://php.net/manual/en/language.types.callable.php
你也可以这样做,BTW:
$method = 'selectData';
$score->$method($this->user_id);
答案 1 :(得分:1)
if (@include_once($file)) { //including the file
$scoreClass = 'Score_' . $this->id;
$test = new $scoreClass();
$test->selectData($this->user_id);
}
这就是你所要做的。因为在使用new
时可以使用变量类名。
当您调用使用$this
的非静态方法(应该抛出一些错误)时,上述操作失败。