Метод существует, но его нельзя вызвать

Я работаю с 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)

0

Решение

Если ваш код выглядит так:

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

2

Другие решения

Если вы пытаетесь установить имя пользователя, как в первом примере, вам, вероятно, следует сделать следующее:

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

Не это:

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

Как уже отмечали другие, вызов несуществующего метода вызовет фатальную ошибку. Таким образом, метод вызывается, но просто не делает то, что вы думаете, что он делает. Вероятно, установка неправильного поля, в зависимости от того, что вы написали.

VBulletin Docs

1

По вопросам рекламы [email protected]