方法存在,但它可以';不要叫我


Method exists but it can't be called

我使用的是vBulletin,必须使用vB_datamanager_User类。我已经包含了正确的文件,并且类已经存在。

我必须使用一个名为set_userfields的方法,但它并不存在(在php看来)。奇怪的是,如果我做

$newuser = new vB_DataManager_User($vbulletin,ERRTYPE_ARRAY);
$newuser->set('username',"MyUsername");

它有效。

如果我做

var_dump(method_exists($newuser, 'set_userfields'));

返回bool(true)

但如果我做$newuser->set_userfields(array('field12' => 1));,它就不起作用(没有错误)。

我做错了什么?

EDIT:该方法被声明为function set_userfields(&$values, $verify = true, $all_fields = 'normal', $skip_unset_required_fields = false)

如果您的代码如下所示:

<?php
class vB_DataManager_User{
    public function __construct($a, $b){
    }
    function set_userfields(&$values, $verify = true, $all_fields = 'normal', $skip_unset_required_fields = false){
    }
}
$newuser = new vB_DataManager_User($vbulletin,ERRTYPE_ARRAY);
$newuser->set_userfields(array('field12' => 1)); // it doesn't work (with no errors).

你应该得到这个:

致命错误:无法通过引用传递参数1

如果没有,那就意味着您还没有在开发框中启用完整的错误报告。它与方法的存在无关,方法无论如何也会触发错误:

致命错误:调用未定义的方法vB_DataManager_User::not_valid()

如果你想像第一个例子那样设置用户名,你可能应该这样做:

$newuser->set_userfields(array('username' => 'MyUsername'));

不是这个:

$newuser->set_userfields(array('field12' => 1));

正如其他人所指出的,调用一个不存在的方法会引发致命错误。因此,该方法正在被调用,但并没有执行您认为它正在执行的操作。根据你所写的内容,可能设置了错误的字段。

VBulletin Docs