方法存在但无法调用

时间:2014-09-16 15:52:11

标签: php class oop methods vbulletin

我正在使用vBulletin,我必须使用vB_datamanger_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));它没有工作(没有错误)。

我做错了什么?

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

2 个答案:

答案 0 :(得分:2)

如果您的代码如下所示:

<?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()

答案 1 :(得分:1)

如果您尝试按照第一个示例设置用户名,则应该这样做:

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

不是这个:

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

正如其他人所说,调用一个不存在的方法会产生致命的错误。所以这个方法正在被调用,但只是没有做你认为它正在做的事情。可能根据您所写的内容设置错误的字段。

VBulletin Docs