Ok, przykład najprostrzego połączenia z bazy danych, testuję tutaj źródło połączenia (resource)
<?php /** * Debug function */ function debug_connection($rResource, $sText) { } /** * Ok, let's go... */ $rConnection = null; /** * ... that's all. */ ?>
Test wyszedł

Ok, przyjmijmy, że połączenie jest ustanawiane przez klasę. Przykład:
<?php abstract class MySQL_ConnectResource { protected $_rConnection = null; } final class MySQL_test1 extends MySQL_ConnectResource { private $_sIdentyficator = null; public function __construct($sIdentyficator) { $this->_sIdentyficator = $sIdentyficator; } public function __destruct() { else echo'<p style="color: red"> Error thrown: try to close missing connection at <b>'.$this->_sIdentyficator.'</b>!</p>'; } } /** * EXAMPLES */ $oDb = new MySQL_test1('1 instance'); $oDb = new MySQL_test1('2 instance'); // prawidlowe zamkniecie #2, komplikacje #3 $oDb = new MySQL_test1('3 instance'); // ... komplikacje $oDb = new MySQL_test1('4 instance'); // prawidlowe zamkniecie #4, komplikacje #5 $oDb = new MySQL_test1('5 instance'); // ... komplikacje ?>
Jak widzimy w linii testu: ciągle niszczymy poprzednią instancję połączenia nadpisując drugą, przez co połowa połączeń nie zamyka się

A co jak chcę przy pierwszym nadpisaniu wysłać zapytanie metodą (nieistniejącą w mojej powyższej klasie) Execute(), która sprawdza czy połączenie jest is_resource()? Wówczas nie wykona sie, tylko wywali mi wyjątek (załóżmy że wywalam wyjątek).
Moje pytanie brzmi: Co zrobić, aby przy nadpisaniu zawartości zmiennej (w tym przypadku obiektu) połączenie spokojnie się zamknęło?
P.S. To nie jest mój problem, ale zawsze mnie ciekawił - dobry temat do dyskusji i szerokie pole popisu speców od php. Może wspólnie wyciągniemy jakieś wnioski.
Pozdrawiam, Athlan
