PHP 変数のスコープ(参照できる有効範囲)〜未経験の為のPHPプログラミング講座〜
2020年9月1日
2021年2月19日

前回、前々回と関数についての記事を書きました。
今回は、関数にまつわる「スコープ(変数の参照できる有効範囲)」の解説を行います。
スコープ(参照できる有効範囲)とは?
スコープとは変数の参照できる有効範囲のことです。
スコープは2種類に分類できます。
- スクリプト全体から参照可能なグローバルスコープ
- 関数の中でのみ参照可能なローカルスコープ
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $x = 'グローバル'; function scopeFunction(){ $x .= 'ローカル'; return $x; } echo $x.'<br>'; echo scopeFunction(); ?> |
一見、関数内の「$x」はグローバル変数の「$x = ‘グローバル’」に文字列を連結して「グローバルローカル」となりそうですが実際には下記の様な結果となります。
1 2 | グローバル ローカル |
上記とは逆に関数内で宣言した「ローカル変数」を、関数外から参照することもできません。
global命令
関数内で関数外にある$xを参照したい場合は「global命令」を利用することにより可能となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $x = 'グローバル'; function scopeFunction(){ global $x; $x .= 'ローカル'; return $x; } echo $x.'<br>'; echo scopeFunction(); ?> |
global $x; で関数内のローカル変数 $x を強制的にグローバル変数 $x とみなすことができます。
1 2 | グローバル グローバルローカル |
global命令を利用しない場合
global命令を利用せず、関数の引数として $x を渡してやることで同じ結果となります。
※厳密にはglobal命令を利用したものと全く同じではありません。
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $x = 'グローバル'; function scopeFunction( $x = '' ){ $x .= 'ローカル'; return $x; } echo $x.'<br>'; echo scopeFunction( $x ); ?> |
スコープの便利さ
スコープを見てきましたが一見難しいように思いますが、関数外の変数$x(グローバル変数)と関数内の変数$x(ローカル変数)は別物として扱われます。
前回学習した「ユーザー定義関数」をで自作の関数を作成時、簡単な変数名($iや$xなど)を利用している場合、変数の上書きをしてしまわないよう注意が必要ですが、グローバルスコープ、ローカルスコープのおかげで関数に関しては「変数の上書き」の心配がありません。
created by Rinker
PHP7の基本構文から、クラス、DB連携、セキュリティ対策まで、しっかり習得! PHPプログラミングの標準教科書『独習PHP』が、最新のPHP7に対応。PHPでWebページ/アプリケーションを開発する際に必要な基礎的な知識、PHPの基本構文から、クラス、データベース連携、セキュリティまで、詳細かつ丁寧に解説します。
created by Rinker
時間がなくたって、プログラミングは学べます。学習を躊躇していた人たちに、既存の入門書で挫折した人たちに、「これならできる!」の最短カリキュラムを、土日の14時間で提供。まったくのプログラミング初心者が簡単なWebデータベースアプリを構築できるまでの成長コースを、手取り足取り、導きます。
S.E->関連記事;
- ベクトル検索とは?仕組みからRAG・生成AIでの活用方法まで初心者向けに解説
![ベクトル検索とは?仕組みからRAG・生成AIでの活用方法まで初心者向けに解説 ベクトル検索とは?仕組みからRAG・生成AIでの活用方法まで初心者向けに解説]()
- XSERVERにSSHを利用してLaravel環境を構築する
![XSERVERにSSHを利用してLaravel環境を構築する XSERVERにSSHを利用してLaravel環境を構築する]()
- フリーランスエンジニア・業務委託でフルリモート案件が激減している理由
![フリーランスエンジニア・業務委託でフルリモート案件が激減している理由 フリーランスエンジニア・業務委託でフルリモート案件が激減している理由]()
- AI時代のスキルシートの書き方|エンジニアが評価される経験・スキルの伝え方
![AI時代のスキルシートの書き方|エンジニアが評価される経験・スキルの伝え方 AI時代のスキルシートの書き方|エンジニアが評価される経験・スキルの伝え方]()
- PHP・Laravel案件が減ってJava・Python・ノーコードが主流に?フリーランスエンジニアが今インプットすべきこと
![PHP・Laravel案件が減ってJava・Python・ノーコードが主流に?フリーランスエンジニアが今インプットすべきこと PHP・Laravel案件が減ってJava・Python・ノーコードが主流に?フリーランスエンジニアが今インプットすべきこと]()
- Salesforceのプログラミング言語「Apex」を学べば案件獲得できるのか?フリーランスエンジニアが学ぶべき理由と現実
![Salesforceのプログラミング言語「Apex」を学べば案件獲得できるのか?フリーランスエンジニアが学ぶべき理由と現実 Salesforceのプログラミング言語「Apex」を学べば案件獲得できるのか?フリーランスエンジニアが学ぶべき理由と現実]()
- Open AIを利用した占いサイトの構築|AIで恋愛占いを身近なWebサービスへ
![Open AIを利用した占いサイトの構築|AIで恋愛占いを身近なWebサービスへ Open AIを利用した占いサイトの構築|AIで恋愛占いを身近なWebサービスへ]()
- Shopify APIを利用して在庫管理を行うShopify APIで在庫を自動更新する仕組みを調査・実装してみた
![Shopify APIを利用して在庫管理を行うShopify APIで在庫を自動更新する仕組みを調査・実装してみた Shopify APIを利用して在庫管理を行うShopify APIで在庫を自動更新する仕組みを調査・実装してみた]()
- AI駆動開発 生成AIの無料枠と有料版で出るクオリティーの違いはあるのか?
![AI駆動開発 生成AIの無料枠と有料版で出るクオリティーの違いはあるのか? AI駆動開発 生成AIの無料枠と有料版で出るクオリティーの違いはあるのか?]()
S.E->Weekly Ranking;
S.E->プロフィール;















![Apple AirPods Pro[MWP22J/A]の偽物(コピー品)を正規品と徹底比較 Apple AirPods Pro[MWP22J/A]の偽物(コピー品)を正規品と徹底比較](https://www.programming-se.com/wp-content/uploads/2020/07/スクリーンショット-2020-07-13-0.00.32-300x176.jpg)






