PHP 配列/オブジェクトの値の受け渡しと参照の受け渡し
一般的なデータ型 (int、float、bool) については、この側面では説明しません
ここでは、値渡しのパラメーターとして使用されるクラスの配列とオブジェクトの違いについて詳しく説明します
配列値の受け渡し
<?php function main() { $cc = array( 'a','b' ); change($cc); var_dump($cc); die; } function change($cc){ $cc = array('dd'); } main(); ?> output: array(2) { [0]=> string(1) "a" [1]=> string(1) "b" }
配列参照の受け渡し
<?php function main() { $cc = array( 'a','b' ); change($cc); var_dump($cc); die; } function change(&$cc){ $cc = array('dd'); } main(); ?> outpout: array(1) { [0]=> string(2) "dd" }
クラスオブジェクト値の受け渡し
<?php class pp{ public $ss = 0; } function main() { $p = new pp(); change($p); var_dump($p); die; } function change($p){ $p->ss = 10; } main(); ?> output: object(pp)#1 (1) { ["ss"]=> int(10) }
クラスオブジェクト参照の受け渡し
<?php class pp{ public $ss = 0; } function main() { $p = new pp(); change($p); var_dump($p); die; } function change(&$p){ $p->ss = 10; } main(); ?> object(pp)#1 (1) { ["ss"]=> int(10) }
要約: PHP では、配列は通常の変数として扱われます。値を渡すには実パラメータのコピーが必要ですが、実パラメータの値は渡し後に変更できます。参考
クラスのオブジェクトは値渡しであっても参照渡しであっても参照渡しされます。これはオブジェクトへの参照であり、実際のパラメータ
の値を変更します。