[PHP-users 10335] 引数の参照渡し( call by reference ) 廃止予定について
Naofumi Kondoh
php-users@php.gr.jp
Wed, 25 Sep 2002 13:15:34 +0900
ソフト工房の近藤です。
php.ini に、参照渡しは、将来サポートされないような
記述があります。いつ頃から廃止になるのでしょうか?。
PHP 4.2.1 php.ini より引用。
; Whether to enable the ability to force arguments to be passed by reference
; at function call time. This method is deprecated and is likely to be
; unsupported in future versions of PHP/Zend.
~~~~~~~~~~~~~~~~~~~~~~
PHP 4.2.1 の TODO には、次のような記述もあるので、
PHP 4.3 位までは使えるのでしょうね。
| For PHP 4.3.0:
| * Allow to set a default value for call-by-reference-parameters.
| eg: function hello (&$pallo = NULL) {}
また、変数の参照(リファレンス)も将来廃止になるので
しょうか。
$_SESION['MYSES'] = &mysesobj; のような記述です。
この記述の仕方は、非常に便利なので、変数の参照だけでも
残して欲しいですね。
参照渡しは、多用しているため、将来廃止になるならば、
プログラム設計を変えなければならないので、このあたり
の事情ご存じの方、お教え頂きたく、よろしくお願いします。
--------------
php.ini の推奨では、allow_call_time_pass_reference = Off
が推奨されています。
CALL BY REFERENCE の禁止を推奨するのは当然だと思うのですが、
将来廃止されるとなると、既存プログラムの書き直し工数が多大
になるため、困るのは、私だけではないと思います。
技術的な問題であるならば、やむおえないとも思いますが、そう
でないならば、推奨しないとした上で、機能だけは是非残して
欲しいと思います。
----------------
余談ですが、call by refere が廃止になった場合の、
既存プログラムの対策は、
(1)プログラムを全面的に書き換えて、オブジェクト指向にする。
理想だけど工数が多大。
下手に作ると、小さなクラスが山のようにできるかも。
(2)引数をやめ、GLOBAL 変数にする。
変更工数は最小だが、かえって、トラブルの元になる
ようで、逆効果では。
(3)配列にして return する。
変更工数も比較的少なく、弊害もない。
ただ、プログラムコードは、かえって読みにくく
なるように思いますが、如何でしょうか。
まあ、確かに、PHP の参照渡しは、C と違って、関数定義でも
参照渡しに指定できるので、関数を呼ぶ側は、call by value
なのか、call by reference なのか、そこを見ただけでは、
わからないという問題は、ありますね。
# 私は、関数定義と関数呼び出しの両方で、意図的に変数に
# & を付けるとか、コメントを入れています。
# 関数側で指定するのは、ada も同じかな?。
参照渡しを便利というか、必須と考えるのは、C プログラマの
悪癖なのでしょうか?。オブジェクト指向が身についていない
からなのかな?。 このあたりも、ご意見賜りたく。
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
(株)ソフト工房 近藤直文 Email: nkon@shonan.ne.jp
http://www.SOFTKOUBOU.co.jp/ http://www.shonan.ne.jp/~nkon/
2002-09-26(木)19:00-21:30 第6回 JPUG 業務アプリ分科会 勉強会
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/