PHP. Вызов функции внутри объекта приводит к ошибке: "Вызов функции-функции-члена() для целого числа в '

81
8

У меня возникли проблемы с вызовом функции внутри класса __construct.

Функция:

function dbcom_query($con,$query) {
if (!$mysqli_result = $con->query($query)) dbcom_error();
return $mysqli_result;
}

И класс:

class User {

public $id;
public $con;
public $full_name;
public $disp_name;

public function __construct($id,$con) {
$query = "SELECT * FROM user_1;";
$result = dbcom_query($con, $query);
if ($result) {
$usr_array = mysqli_fetch_assoc($result);
$this->full_name = $usr_array['full_name'];
$this->disp_name = $usr_array['disp_name'];
}
}
}

    Я помещаю user_ 1 в запрос, чтобы смягчить любые сомнения относительно того, как строится запрос. В противном случае это будет $ id.

Но потом я получаю эту ошибку, не уверен, что происходит:

Вызов функции-функции-члена() для целого числа в строке... 'x'

Где "x" -line: $query = "SELECT * FROM user_1;";

И, если я вызываю эту функцию dbcom_query() вне любого объекта, она отлично работает.

EDIT: ничего себе, мне немного стыдно... Я звонил $user = new User($con,$id)" - неправильный порядок параметров. Какая глупая ошибка. Извините, ребята!

спросил(а) 2016-08-03T20:47:00+03:00 3 года, 8 месяцев назад
1
Решение
101

Когда вы вызываете $ con в классе, это целое число. Убедитесь, что вы правильно передали значения в класс. Вы можете переписать функцию __constructor, чтобы выглядеть следующим образом, если вы хотите добавить для нее обработку ошибок. Просто добавьте имя класса (импортируйте пространство имен, если оно есть), например:

public function __construct($id, ConnectionClass $con) {

ответил(а) 2016-08-03T20:54:00+03:00 3 года, 8 месяцев назад
36

Я думаю, вы пропустили одну часть метода __construct, сохранив предоставленный объект $ con внутри локального значения $ con:

public function __construct($id,$con) {
$this->con = $con;
$query = "SELECT * FROM user_1;";
$result = dbcom_query($con, $query);

if ($result) {
$usr_array = mysqli_fetch_assoc($result);
$this->full_name = $usr_array['full_name'];
$this->disp_name = $usr_array['disp_name'];
}

Но настоящая проблема может возникнуть из-за того, как вы создаете объект User. Пожалуйста, предоставьте "новый пользователь ($ foo, $ bar)" часть вашего кода, чтобы увидеть этот момент.

В более общем плане, я предлагаю вам определить:

global $con;

в начале вашего скрипта, чтобы эта переменная была доступна практически из любого места.

Массивное редактирование, извините :)

ответил(а) 2016-08-03T21:00:00+03:00 3 года, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема