変数をグローバルにすることで変数にアクセスできるようにするコードに直面し、それが他の言語のアプローチ/動作と異なるかどうかを考え始めました
<?php
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
echo $a1 . " " . $a2 . " " . $a3 . "<br />";
fix_names();
echo $a1 . " " . $a2 . " " . $a3;
function fix_names()
{
global $a1; $a1 = ucfirst(strtolower($a1));
global $a2; $a2 = ucfirst(strtolower($a2));
global $a3; $a3 = ucfirst(strtolower($a3));
}
?>
このコードは、関数外で定義された変数にアクセスし、それらを関数内でグローバルにします。これは他の言語ではほとんどありません。たとえば、C のグローバル空間に変数を記述し、それらをグローバルにすると、関数内でそれらにアクセスできます。そのため、まずそれらをグローバルにしてから、どこからでもアクセスできるようにします。上記のコードでは、最初に関数内でそれらにアクセスし (また、引数として渡されない場合に関数内で $a1、$a2、$a3 にアクセスする方法がわかりませんでした)、それらをグローバルにします。これは、PHP プロセッサの動作が異なるためですか。
また、宣言から離れた場所で変数をグローバルにする方法もわかりませんでした。
申し訳ありませんが、これはコードがどこで壊れているのかを正確に尋ねる質問ではないかもしれませんが、なぜコードが特定の方法で記述され、なぜ特定の方法で動作するのかを理解することも重要であると考えています.
(できれば) 明確な言葉で表現する
私が知りたい:関数内で、外側のスコープに既に存在する変数と同じ名前のグローバル変数を作成すると、新しいグローバル変数を作成する代わりに、実際に外側のスコープで変数をグローバル化します(null値を使用) )。そうですか?はいの場合、それは他の言語とは異なりますか? では、そのような明確な行動の背後には何か理由があるのでしょうか?