Benvolio
Guest
Потестируем destroyable объекты в PHP4?
Здравствуйте!
Мне недавно пришлось писать класс-брокер для работы с транзакционной БД и реализующий свою некоторую транзакционную логику. И всвязи с этим мне потребовалось чтобы при destroy объекта брокера вызывался деструктор, откатывающий все незавершенные транзакции и после этого громко ругался на разработчика.
Писать пришлось для PHP4. У меня работает на PHP 4.2.2. конечно как всегда писалось для себя, но если вы взглянете на код и на тест и выскажете свои комменты, буду признателен.
Вот как выглядит тест:
И вот его результат:
Current PHP version: 4.2.2
Let's play!
Object #1 created.
Object #2 created.
Object #3 created.
Object #4 created.
Object #5 created.
Kill 'em all!
Object #1 destroyed.
Object #2 destroyed.
Object #3 destroyed.
Object #4 destroyed.
Object #5 destroyed.
Код абстракта лежит по адресу http://jerusalimov.ru/eugene/codes/PHP/Destroyable_Objects/
Буду благодарен за ваши суждения и комментарии.
Здравствуйте!
Мне недавно пришлось писать класс-брокер для работы с транзакционной БД и реализующий свою некоторую транзакционную логику. И всвязи с этим мне потребовалось чтобы при destroy объекта брокера вызывался деструктор, откатывающий все незавершенные транзакции и после этого громко ругался на разработчика.
Писать пришлось для PHP4. У меня работает на PHP 4.2.2. конечно как всегда писалось для себя, но если вы взглянете на код и на тест и выскажете свои комменты, буду признателен.
Вот как выглядит тест:
PHP:
<?php
/*
+--------------------------------------+
| Test for Destroyable objects |
| Copyright 2005 Eugene Jerusalimov |
| mailto: eugene аt jerusalimov dоt ru |
| http://jerusalimov.ru/eugene/ |
+--------------------------------------+
*/
error_reporting(E_ALL);
require_once('AbstractDestroyable.class.php');
$OBJ_NUM = 0;
class TestDestroyable extends AbstractDestroyable {
var $obj_num;
function TestDestroyable() {
global $OBJ_NUM;
parent::AbstractDestroyable();
$this->obj_num = ++$OBJ_NUM;
echo "Object #".$this->obj_num." created.<br>";
}
function _DESTROY() {
$this = &$this->__get_real_this();
echo "Object #".$this->obj_num." destroyed.<br>";
parent::_DESTROY();
}
}
echo "Current PHP version: ".phpversion()."<br>";
echo "Let's play!<br>";
## Unfortunately, this object can't be destroyed by unset.
## You can guess why, looking the code of the Abstract.
## $obj =& new TestDestroyable();
## unset($obj);
$obj_arr = array();
for($i=0; $i<5; $i++) {
$obj_arr[$i] =& new TestDestroyable();
}
## Unnecessary, but impressive
die("Kill 'em all!<br>");
?>
Current PHP version: 4.2.2
Let's play!
Object #1 created.
Object #2 created.
Object #3 created.
Object #4 created.
Object #5 created.
Kill 'em all!
Object #1 destroyed.
Object #2 destroyed.
Object #3 destroyed.
Object #4 destroyed.
Object #5 destroyed.
Код абстракта лежит по адресу http://jerusalimov.ru/eugene/codes/PHP/Destroyable_Objects/
Буду благодарен за ваши суждения и комментарии.