LoginSignup
2
1

More than 5 years have passed since last update.

PHP Manual 読書会(3回目)(変数)

Last updated at Posted at 2017-05-25

PHPに慣れる為に週1ぐらいで更新していきます。PHP Manualを読んで実験して行きます。

前回: PHP Manual 読書会(2回目)(型)

基本的な事

無効な変数名を使用しようとした場合。

<?php

$3hoge = 'hoge';
PHP Parse error:  syntax error, unexpected '3' (T_LNUMBER), expecting variable (T_VARIABLE) or '{' or '$'

こんな感じでエラーが出ます。
ちなみに、ソース落として確認したところ、scanner周りにT_LNUMBERがあったのでその辺でしょうか。

気になるところは、初期化してない変数の問題が書かれていて、

初期化されていない変数のデフォルト値に依存すると、そのファイルを include している別のファイルで同名の変数が使用されていた場合などに 問題を起こします。

これは知らないでいると痛い目を見るところでした。

初期化されてない変数を使用した場合

当然エラーになります。こう記述されています。

初期化されていない変数を使用すると、 E_NOTICE レベルのエラーが発生します

php意外と初期化しなくてもエラーにならないかと思っていたので確認出来て良かったです

<?php

echo $hoge;
PHP Notice:  Undefined variable: hoge

定義済みの変数

これは、そんなに多くないので以下のリンク先を確認すればいい。

変数のスコープ

本日一番驚いたところで、

スコープの範囲は、 includeやrequireにより読みこまれたファイルも含みます

というところです。
つまり、以下の様になります。

<?php

$hoge = "hoge";

include 'other.inc' // $hogeは、ここのスクリプトの中でも利用が可能

関数はスコープになり得るので、基本関数単位で有効範囲を絞った方が良さそうです。

静的変数の使用

静的変数の定義が、

静的変数はローカル関数スコープのみに 存在しますが、プログラム実行がこのスコープの外で行われるようになっ てもその値を失わないません。

Cのstatic変数と同じ挙動なんですね。

<?php

function hoge()
{
    static $count = 0;
    $count++;
    echo $count . PHP_EOL;
}

hoge();
hoge();

結果

1
2

可変変数

可変変数は、変数の値をとり、変数の名前として扱います

と書かれているので、実際にやるとこうなります。
動的に変数名を変えたい場合とかに便利です。(あまり多用するとまずそうですが)

<?php

$name = 'hoge';
$hoge = 'aaaaa';

echo $hoge . PHP_EOL;

$$name = 'bbbbb';

echo $hoge . PHP_EOL;
aaaaa
bbbbb
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1