Как заставить текущий объект перезаписать самого себя? Добавил теги Java и C++, т.к. интересно, возможно ли что-то подобное в других ООП-языках.
Такой класс:link;
# сохранение аргументов
$this->config = $config;
$this->charset = $charset;
# подключение к СУБД
$link = new mysqli($config['host'], $config['username'], $config['password']);
# установка БД
$this->SetDB($config['dbname']);
# установка кодировки
$this->SetCharset($charset);
}
function SetDB($dbname) {
# ...
}
function SetCharset($charset) {
# ...
}
function Reconnect() {
# линки
$config = &$this->config;
$charset = &$this->charset;
# перезапись объекта
$this = new self($config, $charset);
}
# ...
}
Вызов Reconnect() должен перезаписывать текущий объект.$db = new DB($MySQLConfig, $charset);
# ...
$db->Reconnect();
Но вместо этого: PHP Fatal error: Cannot re-assign $this in /class/DB.php
Проблему можно решить так: $db = $db->Reconnect();
Но это не лаконично и затрудняет использование метода.UPD:
Я не уверен, но должно работать так:function Reconnect() {
# линки
$config = &$this->config;
$charset = &$this->charset;
# перезапись объекта
$this->__construct($config, $charset);
}
Ошибок не вызывает.

21 Авг 2019 в 07:02
216 +1
0
Ответы
1

Да, вы правы. В данном случае можно использовать вызов конструктора в методе Reconnect() для перезаписи текущего объекта. Ваш вариант должен быть работоспособным:

function Reconnect() {
$config = &$this->config;
$charset = &$this->charset;
$this->__construct($config, $charset);
}

Используя это решение, вы сможете перезаписать текущий объект класса DB без необходимости присваивания результата вызова Reconnect() как нового экземпляра.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир