PHPに慣れる為に週1ぐらいで更新していきます。PHP Manualを読んで実験して行きます。
基本的な事
無効な変数名を使用しようとした場合。
<?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