[PHP-users 10354] CALL 側での 引数参照渡し指定
Naofumi Kondoh
php-users@php.gr.jp
Thu, 26 Sep 2002 01:52:13 +0900
ソフト工房の近藤です。大垣さん、こんにちは。
私の早とちりで、間違った SUBJECT を付けてしまい
申し訳ありませんでした。 > ALL
詳しい解説ありがとうございます > 大垣さん
Yasuo Ohgaki wrote:
> 大垣です。
>
> # 収束してすが、コメントだけ
>
> Call time pass by referenceには大きな問題があります。
> モジュール関数の引数を無理矢理Pass by Referenceで渡したり
> できるのですが、これが問題になります。また、call time
> pass by referenceを使ったコードはメンテナンス性が非常に
> 落ちます。
プロトタイプチェックなどがないので、その通りですね。
C に慣れていると、CALL 側で、CALL BY REFERENCE である
事が明示されないと気持ち悪いだけで。
PHP には、PHP のスタイルでやるべきですね。(反省)。
> PHP4はパフォーマンス向上の為にpass by referenceを使う
> 必要はありません。Reference countという機能(pass by
> referenceと関係なし)があるため、pass by valueで渡し
> てもPHPが各変数にもっている内部参照カウンタがインクリメント
> されるだけです。
なるほど。
値渡しの引数を参照(READ ONLY)の場合は、複製せずに元の
変数の実体を使用するということですね。
値渡しの引数に代入した時だけは、新しく変数領域を確保
して複製するという仕組みでしょうか。
# ソースコード読みたい。身体が3つ位欲しいですね。(^_^;;
...略...
---- 追記 ----
allow_call_time_pass_reference = Off に設定して、
Warning が出るのは、松嶋さんご指摘のとおり、CALL 側で
& を付けて、参照渡しにした場合だけであることを確認しました。
TEST 環境:PHP 4.2.1 Linux
function hoge ( &$foo ) { ++$foo; }
hoge( $foo ); // ○ Warning は出ない。
hoge( &$foo ); // × Warning が出る。この書き方だけが、
// 将来廃止になる見込み。
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
(株)ソフト工房 近藤直文 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 業務アプリ分科会 勉強会
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/