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

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

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

回答の条件
  • 1人2回まで
  • 登録:2009/07/05 02:41:22
  • 終了:2009/07/12 02:45:02

ベストアンサー

id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/07/05 17:57:07

ポイント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

kn1967a回答回数356ベストアンサー獲得回数72009/07/05 17:39:06

ポイント27pt

ない

id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/07/05 17:57:07ここでベストアンサー

ポイント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

sphire回答回数115ベストアンサー獲得回数122009/07/07 21:09:10

ポイント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
    解答ありがとうございました。

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

    ----

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません