[PHP-users 26147] Re: Referenceの仕様変更(was Re: PHP 4.4.0 Release Announcement)
Yasuo Ohgaki
yohgaki @ ohgaki.net
2005年 7月 13日 (水) 17:06:44 JST
大垣です。
書きかけで送ってしまいましたが、前のメールでも何が悪いのか
分かったと思います。
Yasuo Ohgaki wrote:
> それほど難しく考える事はありません。スクリプト中に
>
> "string"
>
> array('a','b')
>
> の様に定義した場合、「定数」としてコンパイルされます。
>
> return 定数;
>
> とした場合、定数としてコンパイルされた値を参照できてしまったため
> メモリ破壊が発生していました。このバグを修正したのが今回の修正で
> す。
>
> 似たような例がバグレポートに載っています。こちらは定数の戻り値を
> 引数してしまった場合の例になります。とブログに書いたのでよろしけ
> れば参照してください。
>
> http://blog.ohgaki.net/index.php/yohgaki/2005/07/13/ar_a_da_ca_ca_ra_c_s
>
要するに定数へのリファレンスが作成され、そのリファレンスが
そのまま利用されてしまうような書き方は間違いである、という
ことです。
実践的ではないかも知れませんがcase文などで
switch($some_condition) {
case FOO1:
case FOO2:
return "FOO";
break;
case BAR1:
base BAR2:
return "BAR";
}
の様な形で「定数」を関数・メソッドの戻り値として返し、その値を
「参照」としてアクセスするとエラーになります。
このような使い方は割と頻繁に見られるので今後は注意してコーディング
する必要があると思います。
--
Yasuo Ohgaki
PHP-users メーリングリストの案内