woshidan's blog

あいとゆうきとITと、とっておきの話。

phpの変数や配列について確認していた1

一日一章読めば今週中にwebサービスらしきものが書けるんじゃないかという妄想に取り付かれたので、今日はパーフェクトphpの二章と三章を読んでました。

 

もっとたくさんあったのだけれど、とりあえず以下の4つについて軽くまとめておきます。

 

  • 変数のスコープ
  • 可変変数
  • 定数定義
  • エラーの種類

 

変数のスコープ

関数やオブジェクトの{}の中で変数を定義するとその関数やオブジェクトの中のみで使えるローカル変数に。いっぽう、それ以外のphpのなかで定義した変数はグローバル変数となって、そのphpはもちろん他のphpファイルからも呼び出すことが出来る。また、自分で定義しなくても自動的に定義されてphpの全箇所から参照可能なスーパーグローバル変数もある。なお、スーパーグローバル変数の$_SERVERをvar_dumpで出力すると実行環境が詳しく出力される。

 

可変変数

呼び出したい変数の名前を別の変数で指定することが出来る、というとわけが分からないが、

<?php

$var = 'taro';

$var_name = 'var';

echo $$var_name;

?>

のように書くと、まず$($var_name)=$('var')のように$var_nameが評価されて'var'という文字列が一番左の$の識別子になり,$($var_name) = $('var') = $var として扱われるので、画面にはtaroと出力される。要するに変数名を変数を使って作れるので、呼び出したい変数名を指定する際、場合わけで書いていたのが結構簡単で済むっぽいということ。

 

定数定義

define("定数名","要素")により定数を定義することが出来る。定数は変数と違って$マークを名前の前につけなくてよい。一度定義するとあらゆるスコープからアクセス可能である。

 

エラーの種類

php.iniでエラー表示の指定するときの表記に従って6種類。

E_PARSE

シンタックスエラー。文法が合っていない場合。カッコの閉じ忘れや';'忘れが多い。微妙にずれた位置が表示されることもあるしでふだんから注意したい。これがあるとphpは動かない

E_ERROR

実行時のエラー。定義されてない関数の呼び出しや、既に定義された関数の再定義をしてしまった場合に発生。これが発生した行でphpの実行が止まる

E_WARNING

実行時の警告。関数の引数の型や数を間違えたりを筆頭によく出る。発生した文は実行されない。また、関数の返り値を設定していた場合、その値はnullとなる。一度発生すると、その関数の返り値を使うはずだった別の関数もE_WARNINGになってしまうことは想像にかたくなく、雪だるま式に生じることが予想される。確実に上のほうから消していきたいかも。

E_NOTICE

これも実行時の警告であるが、E_WARNINGと違って、適当にphp側で処理を選んで実行する。実行されるとはいえ、整数型の定数が文字列として処理されているなど設計したとおりに動いていないことには違いなく、E_NOTICEがE_WARNINGをよんだり、条件式の評価結果などもっと重大なバグを生む可能性はある。この二つは学生の実験課題だと放置されることもある。

 

以下の二つは出ても書いた時点での意図通りの動作はするらしいです。

E_DEPRECATED

過去のバージョンではよいとされていた文法や関数の仕様が現行のバージョンでは非推奨となっていることを通知する。放置しておくと将来的に動かなくなることがある。

E_STRICT

互換性維持のために変更したほうが望ましい記述があった場合に発せられる。色んなところで動かすためにこの辺は守ろうかという警告らしい。

 

続く。