Я работаю с 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)
Если ваш код выглядит так:
<?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));
Как уже отмечали другие, вызов несуществующего метода вызовет фатальную ошибку. Таким образом, метод вызывается, но просто не делает то, что вы думаете, что он делает. Вероятно, установка неправильного поля, в зависимости от того, что вы написали.