シングルクォーテーションとダブルクォーテーション
- シングルクォーテーション
文字列を表示するときにそのまま表示できる$a = 'hoge'; echo '$a の中身は ' . $a . ' です。'; /* 結果 $a の中身は hoge です。 */
- ダブルクォーテーション
文字列を表示するときに変数を展開して表示できる$a = 'hoge'; echo "$a の中身は " . $a . ' です。'; /* 結果 hoge の中身は hoge です。 */
処理速度はシングルクォーテーションの方が速い
意図しない変数展開を避けるためにダブルクォーテーションの使用は必要最低限にする
同値比較と等値比較
- 同値比較(===, !==)
対象をデータ型まで考慮して比較できる$a = 1; $b = '1'; if ($a === $b) { echo true; } else { echo false; } // 結果 false
- 等値比較(==, !=)
対象をコンテキスト(文脈)で比較できる$a = 1; $b = '1'; if ($a == $b) { echo true; } else { echo false; } // 結果 true
処理速度は同値比較の方が速い
意図しない分岐を発生させないために等値比較は使用しない
参照渡しと値渡し
PHPのリファレンスカウンティング にわかりやすい解説が載っています。
- 参照渡し(&$argument)
メソッドに変数を渡す時に、渡す変数のリファレンス(ポインタ、アドレス)を別の変数にコピーして渡す
渡した変数の中身を更新できるfunction method(&$arg) { $arg = 'hare'; echo '2:' . $arg . "\n"; } $arg = 'hoge'; echo '1:' . $arg . "\n"; method($arg); echo '3:' . $arg . "\n"; /* 結果 1:hoge 2:hare 3:hare ← 変化している */
- 値渡し($argument)
メソッドに変数を渡す時に、渡す変数の値を別の変数にコピーして渡す
渡した変数の中身を保護できるfunction method($arg) { $arg = 'hare'; echo '2:' . $arg . "\n"; } $arg = 'hoge'; echo '1:' . $arg . "\n"; method($arg); echo '3:' . $arg . "\n"; /* 結果 1:hoge 2:hare 3:hoge ← 変化していない */
PHPではオブジェクトは参照渡しになるためメソッドに渡すときのアンパサンドは不要
オブジェクトを複製する場合はcloneを使う。
オブジェクトを複製する場合はシャローコピーとディープコピーの知識が必要