Как заставить текущий объект перезаписать самого себя? Добавил теги 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); } Ошибок не вызывает.
Да, вы правы. В данном случае можно использовать вызов конструктора в методе Reconnect() для перезаписи текущего объекта. Ваш вариант должен быть работоспособным:
Используя это решение, вы сможете перезаписать текущий объект класса DB без необходимости присваивания результата вызова Reconnect() как нового экземпляра.
Да, вы правы. В данном случае можно использовать вызов конструктора в методе Reconnect() для перезаписи текущего объекта. Ваш вариант должен быть работоспособным:
function Reconnect() {$config = &$this->config;
$charset = &$this->charset;
$this->__construct($config, $charset);
}
Используя это решение, вы сможете перезаписать текущий объект класса DB без необходимости присваивания результата вызова Reconnect() как нового экземпляра.