投稿者 メッセージ
<  PHPプログラミング  ~  php4でのデストラクタについて
Maaboo
投稿1時間: 火 2月 21, 2006 8:30 pm  引用
ゲスト





php4ではデストラクタがサポートされてないみたいなので自作してみたんですが
以下の例はちゃんとオブジェクトは削除されているんでしょうか?
phpのバージョンは、4.4.2です。

/************** destruct.php **************/
$stack = array(); // オブジェクトのリファレンスを格納
$num = 0; // 格納数

register_shutdown_function(destruct_func);

function destruct_func() // シャットダウン時のコールバック登録
{
global $stack; global $num;
for($i=0; $i<$num; $i++ ) {
if($stack[$i]) {
$destruct = '_' . get_class($stack[$i]);
$stack[$i]->$destruct();
$stack[$i] = null;
}
}
}

class destruct { // デストラクタクラス
function destruct() {
global $stack; global $num;

$stack[$num++] =& $this;
}
}

/************** test.php **************/
include_once 'destruct.php';

class test extends destruct {
var $val; // チェック数

// コンストラクタ
function test() { $this->destruct(); $this->val = 100; }

// デストラクタ
function _test() { $this->show(); echo '破棄された。'; }

function show() { echo 'val = ' . ++$this->val . '<br>'; }
}

$c = new test();
$c->show();
$c->show();

/************** 出力結果 **************/
val = 101
val = 102
val = 101
破棄された。

となって、ちゃんと動いてないっぽいので
$c = new test();
の部分を
$c =& new test();
こう変更すると

/************** 出力結果 **************/
val = 101
val = 102
val = 103
破棄された。

となって、ちゃんと動いてる風味なんですけど、
これはちゃんとデストラクタを実装できてると言っていんでしょうか?
あと、 = new が値渡しで、 =& new が参照渡しと考えていいのでしょうか?
トップに移動
ゲスト
投稿1時間: 水 2月 22, 2006 10:16 am  引用






PEARのデストラクタを使いましょう。
http://peardoc.xole.net/core.pear.pear.intro.html

あとGLOBALを使うのはあんまり好ましくないですね。

>これはちゃんとデストラクタを実装できてると言っていんでしょうか?
>あと、 = new が値渡しで、 =& new が参照渡しと考えていいのでしょうか?
そうですね。
トップに移動
特定期間内の記事を表示:   
All times are GMT +9:00

次のトピックを表示
前のトピックを表示
Page 1 of 1
フォーラム一覧  ~  PHPプログラミング

トピックの新規投稿   返信


 
移動先:  

新規投稿: 不可
返信: 不可t
自分の記事の編集: 不可
自分の記事の削除: 不可
投票への参加: 不可




Powered by phpBB
customized by phpspot.