[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 業務アプリ分科会 勉強会
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/