人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP5以降から、配列の代入が値渡しから参照渡しになったのですが、
PHP5で配列の値渡しを簡単にする方法はないのですか?

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


●質問者: pirikara
●カテゴリ:ウェブ制作
✍キーワード:オブジェクト 理想 配列
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kn1967a
●27ポイント

ない


2 ● pahoo
●27ポイント ベストアンサー

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


3 ● sphire
●26ポイント

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
)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ