PHP5で配列の値渡しを簡単にする方法はないのですか?
オブジェクトの __clone() のようなものが理想的です。
PHP5以降から、配列の代入が値渡しから参照渡しになったので
うーん、この部分の意味が分からないので、補足説明をお願いします。
たとえば、下記のスクリプトを実行してもらうと、PHP4でもPHP5でも値渡しになっていることが分かると思います。
<?php $a = array(1,2,3,4,5,6,7,8,9); $b = $a; $a[2] = 'X'; $b[3] = 'Y'; echo 'PHP version = ' . PHP_VERSION . "\n"; echo '$a = '; print_r($a); echo '$b = '; print_r($b); ?>
もしオブジェクトの作用に関する違いを減らしたいというご要望であれば、"php.ini" において
zend.ze1_compatibility_mode = ON
とすることで、ある程度ですが、オブジェクトの作用をPHP4に似せることができます。⇒(参考)zend.ze1_compatibility_mode
PHP5以降から、配列の代入が値渡しから参照渡しになったので
うーん、この部分の意味が分からないので、補足説明をお願いします。
たとえば、下記のスクリプトを実行してもらうと、PHP4でもPHP5でも値渡しになっていることが分かると思います。
<?php $a = array(1,2,3,4,5,6,7,8,9); $b = $a; $a[2] = 'X'; $b[3] = 'Y'; echo 'PHP version = ' . PHP_VERSION . "\n"; echo '$a = '; print_r($a); echo '$b = '; print_r($b); ?>
もしオブジェクトの作用に関する違いを減らしたいというご要望であれば、"php.ini" において
zend.ze1_compatibility_mode = ON
とすることで、ある程度ですが、オブジェクトの作用をPHP4に似せることができます。⇒(参考)zend.ze1_compatibility_mode
PHP5以降から、配列の代入が値渡しから参照渡しになったのですが
配列は参照渡しになっていません。
値渡しな証拠
<?php $a = array( 1 => 'hoge', 2 => 'fuga', 3 => 'hage', ); print_r($a); $b = $a; $b[1] = 'override'; print_r($a); ---- 以下結果 ---- Array ( [1] => hoge [2] => fuga [3] => hage ) Array ( [1] => hoge [2] => fuga [3] => hage )
参照渡しするとこうなる
<?php $a = array( 1 => 'hoge', 2 => 'fuga', 3 => 'hage', ); print_r($a); $b = &$a; $b[1] = 'override'; print_r($a); ---- 以下結果 ---- Array ( [1] => hoge [2] => fuga [3] => hage ) Array ( [1] => override [2] => fuga [3] => hage )
コメント(1件)
どうやら、自分の勘違いみたいですね。
もうちょっと調べてみます。
----
返事を書こうと思いましたが、時間切れで書くことができませんでした。