PHP5以降から、配列の代入が値渡しから参照渡しになったのですが、

PHP5で配列の値渡しを簡単にする方法はないのですか?

オブジェクトの __clone() のようなものが理想的です。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/07/12 02:45:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pahoo No.2

回答回数5960ベストアンサー獲得回数633

ポイント27pt

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

その他の回答2件)

id:kn1967a No.1

回答回数356ベストアンサー獲得回数7

ポイント27pt

ない

id:pahoo No.2

回答回数5960ベストアンサー獲得回数633ここでベストアンサー

ポイント27pt

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

id:sphire No.3

回答回数115ベストアンサー獲得回数12

ポイント26pt

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
)

  • id:pirikara
    解答ありがとうございました。

    どうやら、自分の勘違いみたいですね。
    もうちょっと調べてみます。

    ----

    返事を書こうと思いましたが、時間切れで書くことができませんでした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません