📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の1版が非表示) | |||
| 212行目: | 212行目: | ||
Hello, Charlie! | Hello, Charlie! | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | |||
== グローバル変数の使用 == | |||
PHPのスコープルールにおいて、グローバルスコープで定義された変数は、関数の内部からは自動的にはアクセスできない。<br> | |||
これはPHPの<u>変数スコープの分離</u>という特徴によるものである。<br> | |||
<br> | |||
関数内でグローバル変数を使用する場合は、以下に示すいずれかの方法を使用する必要がある。<br> | |||
* globalキーワードを使用する方法 | |||
<syntaxhighlight lang="php"> | |||
$hoge = 1; | |||
function func1() | |||
{ | |||
global $hoge; // グローバル変数を関数内で使用することを宣言 | |||
echo "$hoge"; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
* $GLOBALS配列を使用する方法 | |||
<syntaxhighlight lang="php"> | |||
$hoge = 1; | |||
function func1() | |||
{ | |||
echo "$GLOBALS['hoge']"; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>グローバル変数の使用は避け、代わりに引数として値を渡すことが推奨される。</u><br> | |||
<u>これにより、関数の依存関係が明確になり、テストや保守が容易になる。</u><br> | |||
<u>ソースコードの予測可能性と再利用性も向上する。</u><br> | |||
<br><br> | |||
== 参照渡し == | |||
参照渡しとは、変数のメモリアドレスを直接渡すことにより、関数内で値を変更すると呼び出し元の変数の値も変更される仕組みである。<br> | |||
<br> | |||
関数の引数の前に&を付加することにより参照渡しになる。<br> | |||
<br> | |||
* 特に大きな配列やオブジェクトを扱う場合、メモリ使用量を節約できる場合がある。 | |||
* 複数の値を同時に変更する場合に便利である。 | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// 参照渡し | |||
function addFiveByRef(&$num) | |||
{ | |||
$num += 5; | |||
} | |||
$value = 10; | |||
addFiveByRef($value); | |||
echo $value; // 15 (元の値が変更される) | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// 配列の要素を全て2倍にする関数 | |||
function doubleArrayValues(&$arr) | |||
{ | |||
foreach ($arr as &$value) { | |||
$value *= 2; | |||
} | |||
} | |||
$numbers = [1, 2, 3, 4, 5]; | |||
doubleArrayValues($numbers); | |||
print_r($numbers); // [2, 4, 6, 8, 10] | |||
</syntaxhighlight> | |||
<br> | |||
参照渡しは、以下に示すような場合に使用することを推奨する。<br> | |||
* 大きなデータ構造を扱う時のパフォーマンス最適化 | |||
* 複数の値を同時に変更する必要がある時 | |||
* オブジェクトのメソッドチェーンを実装する時 | |||
<br><br> | <br><br> | ||