グローバル変数の連想配列変数($GLOBALS)を代入した変数の値を変更すると、$GLOBALS にまで反映されるんですが、PHP8.1.0 からできなくなりました。
え? そんなことできてたの? と思った人もいるでしょう。
むしろ、PHP8.1ではまともになったじゃんって思う。
続きを読むWebのサーバーサイドでよく使われるプログラム言語のPHP。
そのPHPで困っている人のために情報を発信します。
グローバル変数の連想配列変数($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から出発した人間で、なぜか何度も勘違いしてしまう。
続きを読むPHPには、連想配列から変数展開する関数 extract() がありますが、EXTR_PREFIX_IF_EXISTS を使うとリファレンスにも書いてない不思議な結果になることがあります。
たった1つの勘違いでこの結果になるので注意が必要。
続きを読む