我使用的是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