PHP変数のスコープ
PHP変数のスコープ
はじめに
PHP7のtry catch構文を書いていると変数のスコープについて、理解できていないと思ったので理解を深めるためにまとめました。また他にPHPの変数のスコープの内容の記事がたくさんありましたが、自分のために残しておくために記述しておきます。
try catch構文の変数のスコープで疑問
わからなかったのが以下の記述です。テストAとテストBで違う点は最後の行でechoしている$test
をtry catchの前で宣言しているかしていないかです。
try catchの前に宣言していない、testA.phpは正常に動くのか。$test
はtryブロックの中で宣言されているためブロックの外側ではアクセスすることができないのではないかと思いました。
答えは動きます。理由は後述します。
<?php
try {
$test = 'test';
} catch(Exception $e) {
// 何かしらの処理
}
echo $test;
<?php
$test = ''; // 変数宣言をtryブロック外でしている
try {
$test = 'test';
} catch(Exception $e) {
// 何かしらの処理
}
echo $test;
PHPのスコープと変数の種類
2つの概念を理解することスコープとは有効な範囲をしめし、変数の種類はそのスコープを組み合わせによって有効な範囲が違う
PHPのスコープには2つ種類がある
- ローカルスコープ
- 関数の中でのみ有効
- グローバルスコープ
- 関数の外でのみ有効(*関数の引数で渡すまたはglobal宣言を使うと関数内でアクセス可能)
PHPの変数の種類には4つ種類がある
- ローカル変数
- ローカルスコープの変数
- グローバル変数
- グローバルスコープの変数
- スーパーグローバル変数
- ローカルスコープとグローバルスコープの両方をもつスコープ(つまりどこからでもアクセスすることができる)
- $GROBALSなど
- スタティック変数
- ローカルスコープで、その値はグローバルスコープと同様にずっと保持される
- 初期化は1回しかされない
PHPはブロック内で宣言した変数は、そのブロックを出ても有効
以上のスコープと変数の種類を知った上で、tyr catch構文でtestA.phpの$test
にアクセスすることができるのかについては、
ブロック内で宣言した変数はグローバル変数となる
そのため、tryブロックの後のコードでもアクセスすることができる。
関数内で定義されたのかがスコープを判断する基準になる
所感
基本のスコープに関して理解ができていなかったので、感覚的に書いていると思うので他の部分も潰していきたいですね。。。
以下のコードは不要な記述となることを覚えておきます。
<?php
$test = '';
try {
$test = 'test';
} catch(Exception $e) {
// 何かしらの処理
}
echo $test;
Author And Source
この問題について(PHP変数のスコープ), 我々は、より多くの情報をここで見つけました https://qiita.com/bellcrud/items/a8281e0914b12c1f0ac8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .