Andreika
"PHP for nubies" reader
про деструкторы
PHP5.1.0/5.1.2
собстно даж не знаю вопрос это или жалоба (кому: на деревню дедушке)
X::__destruct()
MySQL::__destruct()
Test::__destruct()
Warning: mysqli::real_escape_string(): Couldn't fetch MySQL in php3E.tmp on line 34
/* пофиксил ошибку в коде - стало вообще ничего непонятно. */
деструкторы вызываются до "освобождения последней ссылки на объект", но при этом после вызова деструктора объект получается мертвым (деструктор все что надо почистил "вручную"/mysqli закрыла соединение), но доступ к телу разрешен. как это так и как с этим жить, если надо пользоваться mysql в деструкторе (без функций типа save/ $obj=null)
PHP5.1.0/5.1.2
собстно даж не знаю вопрос это или жалоба (кому: на деревню дедушке)
PHP:
class MySQL extends mysqli {
function __construct() {
parent::__construct('localhost','root','','test');
}
function __destruct() {
echo "MySQL::__destruct()<BR>";
}
}
class X {
function t() { echo "TTTT<BR>"; }
function __destruct() { echo "X::__destruct()<BR>"; }
}
class Test {
private $db;
public $x;
function __construct($db,$x) {
$this->db = $db;
$this->x = $x;
}
function __destruct() {
echo "Test::__destruct()<BR>";
$s = $this->db->real_escape_string('ddd');
$this->x->t();
}
}
$x= new X() ;
$db = new MySQL();
$t = new Test($db, $x);
MySQL::__destruct()
Test::__destruct()
Warning: mysqli::real_escape_string(): Couldn't fetch MySQL in php3E.tmp on line 34
/* пофиксил ошибку в коде - стало вообще ничего непонятно. */
деструкторы вызываются до "освобождения последней ссылки на объект", но при этом после вызова деструктора объект получается мертвым (деструктор все что надо почистил "вручную"/mysqli закрыла соединение), но доступ к телу разрешен. как это так и как с этим жить, если надо пользоваться mysql в деструкторе (без функций типа save/ $obj=null)

с другой стороны не так уж и очевидно, что это ПЕРЕД очень растяжимое понятие, особенно по сравнению с тем что применяются в других ОО языках©