[PHP-users 22737]=?ISO-2022-JP?B?UmU6IFtQSFAtdXNlcnMgMjI3MzVdIFJlOiBQZXJsGyRCJE4=?= =?ISO-2022-JP?B?REVTVE9SWRskQiVhJT0lQyVJJEtJJEUoJDkkayRiJE4bKEI=?=
Eiji Miwa
miwa @ offside.ne.jp
2004年 7月 23日 (金) 13:06:54 JST
ミワです。
On 2004年 7月 23日 , at 00:14 PM, 大島由喜枝 wrote:
>
> register_shutdown_function() もクラスの中で実行したいと思い、
> コンストラクター内で実行しましたがうまくいきました。
> :
> class A {
> var $name;
> function A($name) {
> $this->name = $name;
> register_shutdown_function(array(&$this, 'destroy'));
> }
register_shutdown_function に限らず、
set_error_handler などでも同じですが、コンストラクタ内で
自分自身(この場合 class A)を設定してはマズいです。
#少なくとも PHP 4.3.4 の時点では。
詳しいことはよくわかりませんが、コンストラクタ内の $this は
$a = new A() とした場合、インスタンス $a とは別物になってしまうようです。
以下のようにしてみるとよくわかります。
-----
miwa$ /usr/local/bin/php -v
PHP 4.3.4 (cli) (built: Apr 6 2004 19:13:00)
Copyright (c) 1997-2003 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies
miwa$ cat test2.php
<?php
class A
{
var $name;
function A($name)
{
$this->name = $name;
register_shutdown_function(array(&$this,
'destroy'));
}
function destroy()
{
print "さようなら $this->name さん\n";
}
}
print "MAIN START\n";
$a = new A('hoge');
$a->name = 'huga'; // 追加
print "MAIN END\n";
?>
miwa$ /usr/local/bin/php test2.php
MAIN START
MAIN END
さようなら hoge さん
-----
「さようなら huga さん」を期待しますが、そのようにはなりません。
#これは仕様なんでしょうかね?
--
miwa at offside.ne.jp
PHP-users メーリングリストの案内