PHPのグローバル変数を一括管理している変数に $GLOBALS がありますが、普通の連想配列とはちがう動きをします。
変数に代入するとコピーではなくリファレンスやクラスオブジェクトの代入ように動く。
'=&' ではなく '=' でなるのが不思議。
続きを読むWeb技術で困っている人のために情報を発信します。
PHPのグローバル変数を一括管理している変数に $GLOBALS がありますが、普通の連想配列とはちがう動きをします。
変数に代入するとコピーではなくリファレンスやクラスオブジェクトの代入ように動く。
'=&' ではなく '=' でなるのが不思議。
続きを読むグローバル変数の連想配列変数($GLOBALS)を代入した変数の値を変更すると、$GLOBALS にまで反映されるんですが、PHP8.1.0 からできなくなりました。
え? そんなことできてたの? と思った人もいるでしょう。
むしろ、PHP8.1ではまともになったじゃんって思う。
続きを読むPHP8.1.0からグローバル変数の連想配列 $GLOBALS の丸ごと書き換えはエラーになります。変数への代入だけでなく、丸ごと書き換えになりそうなものはすべて。
というか、そんなことする人いたんだ。
$GLOBALSには $_GET や $_POST などの情報もあるので、クラッシャー的行為だと思うんだけど。
続きを読むPHPのグローバル変数は、関数内などで global キーワードを使いますが、PHP公式リファレンスを見てもその正体までは書いてありません。
もうひとつグローバル変数には $GLOBALS がありますが、2つの参照方法ある程度の認識の人も多いでしょう。
globalを使った変数の正体は簡単に証明できます。
続きを読むPHPには連想配列から値の入った変数を一気に作る関数extract()があって便利なんですが、デフォルトでは既存の変数名とかぶると上書きしてしまいます。
それを回避するオプションがあるので、色々パターンを試してどういう動きをするのか見てみましょう。
続きを読むPHPの変数には、C, C++などのポインタ変数と同じ動きをする変数があります。リファレンス(参照)と言います。
これ、ポインタをPHPに実装してるんだと思いがちですが、しくみはまったくちがう。
かくいうボクもCから出発した人間で、なぜか何度も勘違いしてしまう。
続きを読む