PHPのオブジェクトの代入(=)はシャローコピーなので、厳密にはコピーじゃありません。そこでやらないといけないのがオブジェクトのクローン作成。
PHPではcloneキーワードを付けるだけのように見えるんですが、やることは他にもあります。
そこはやっぱりJavaと似ている。
続きを読むPHPのオブジェクトの代入(=)はシャローコピーなので、厳密にはコピーじゃありません。そこでやらないといけないのがオブジェクトのクローン作成。
PHPではcloneキーワードを付けるだけのように見えるんですが、やることは他にもあります。
そこはやっぱりJavaと似ている。
続きを読むPHPにはリファレンス(参照)というポインタのようなものがあります。クラスオブジェクトにも使えるんですが意味がありません。
クラスオブジェクトの変数代入は参照渡しで、それはリファレンスと同じ動きだから。関数のパラメータでも同じ。
ただリファレンスとオブジェクト代入の内部のしくみは全くの別物。
続きを読む今や、クラスを使うプログラミングは主流の一つになっています。
JavaやC++はオブジェクト指向言語のメジャーですが、それまでそうじゃなかったPHPが採用されて久しいほど浸透しています。
そこで出てくるのがシャローコピーとディープコピーという言葉です。
続きを読むPHPのグローバル変数を一括管理している変数に $GLOBALS がありますが、普通の連想配列とはちがう動きをします。
変数に代入するとコピーではなくリファレンスやクラスオブジェクトの代入ように動く。
'=&' ではなく '=' でなるのが不思議。
続きを読むグローバル変数の連想配列変数($GLOBALS)を代入した変数の値を変更すると、$GLOBALS にまで反映されるんですが、PHP8.1.0 からできなくなりました。
え? そんなことできてたの? と思った人もいるでしょう。
むしろ、PHP8.1ではまともになったじゃんって思う。
続きを読むPHP8.1.0からグローバル変数の連想配列 $GLOBALS の丸ごと書き換えはエラーになります。変数への代入だけでなく、丸ごと書き換えになりそうなものはすべて。
というか、そんなことする人いたんだ。
$GLOBALSには $_GET や $_POST などの情報もあるので、クラッシャー的行為だと思うんだけど。
続きを読む