使用PHP调用变量类而不使用call_user_func

时间:2013-04-16 13:19:48

标签: php oop class

有没有办法在不使用'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);

}

2 个答案:

答案 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的非静态方法(应该抛出一些错误)时,上述操作失败。