PHPの言語仕様ー基本(主に変数、定数、エラーのこととか)
◆変数
・可変変数(変数に文字列を入れるとその名前の変数を読むやつ。$$)
<?php
$var = 4;
$var_name='var';
echo $$var_name,PHP_EOL;
$$とあるので最初は'var'文字列が評価され、
二回目の$で$var=4だから
結果として4が表示される。やるじゃんPHP?
◆グローバルスコープとローカルスコープ
変数の基本はグローバル。
でも関数、クラス内はローカルなので他からはアクセスできない。
エラーに注意。
ローカルスコープ、関数とかでどうしてもグローバルを使いたい場合は、
global $foo;
これで使える。
※ただし呼び出された時の変数の値が読まれるので値が変わることあり。
つまりあまり推奨はされてない。
◆定義済み変数
$php_errormsg とか
$_SERVER とか。いろいろあるっっぽい。
ちなみに$_SERVERはスーパーグローバル変数でもあるらしい。
◆スーパーグローバル変数
あらゆるスコープから参照可能なグローバル変数。
重要そうだから本に書いてたの全部メモ。
→echo $GLOBALS['test'],PHP_EOL; てな感じでつかう。やっぱりこれも多用厳禁。
$_SERVER スクリプトのヘッダ、パスなどの情報
→どんな値が入ってるかは環境に依存する。
var_dump($_SERVER); で確認するといい。
$_GET URLパラメータ
$_POST POSTで渡された変数
$_COOKIE クッキーから渡された変数
→とにかく超使う。
$_FILES アップロードされたファイル情報
$_REQUEST $_GET,$_POST,$_COOKIEをまとめた連想配列
$_SESSION セッション変数
$_ENV 環境変数
◆定数定義
あらゆるスコープからアクセス可能。$がいらない。
整数、小数点、文字列のみ入れられる。
配列、オブジェクトは×
define(’BOOK','Perfect PHP'); //Perfect PHPという文字列をBOOKという定数で定義。
echo BOOK,PHP_EOL;
◆Constant()関数
文字列から該当する定数を取得。
define('BOOK','Perfect PHP');
$value='BOOK';
echo constant($value),PHP_EOL; //Perfect PHPと表示
◆定義済み定数
PHP_OS 実行されてるOSの種類
PHP_EOL 実行されてる環境での改行コード
STDIN //標準入力ストリーム
E_WARNING //warningのエラー番号
ちなみに var_dump(get_defined_constants()); で大量の定数確認ができる。
◆マジック定数
__FILE__ ファイルのフルパストファイル名
__DIR__ ディレクトリ名
__LINE__ 現在の行番号
__FUNCTION__ 関数名
__CLASS__ クラス名
__METHOD__ メソッド名
__NAMESPACE__ 名前空間の名前
◆エラーの種類
素人なら絶対出るのでヒントになるはず。
E_PARSE
文法エラーのこと 括弧とかセミコロンとか。実行もしてくれない。
E_ERROR
Fetal errorだったり。同じ名前のクラス定義とか、定義してない関数呼び出しとか。一応そこまでは実行される。
E_WARNING
警告。呼び出す関数の引数の型とか、引数の数とかたくさんある。
E_NOTICE
重要度の低い警告。E_WARNINGとの違いは、「PHPが自動的に頑張ってなにかの対処をする」ってところ。
E_DEPRECATED
PHP5.3以降導入。
以前はよかったのに今は非推奨になったから表示されてる警告。
E_STRICT
互換性維持のため、変更したほうが良い時に警告。
◆ユーザエラー定数
わざとエラーを発生させたい時使う。
E_USER_ERROR 致命的なエラーFetal error
E_USER_WARNING 重要な警告
E_USER_NOTICE 警告
E_USER_DEPRECATED 将来廃止予定機能の警告
◆エラーの設定
error_reporting
どのエラーをを報告するか指定する設定。
E_ALL定数というのあり。これは特別な値として、E_STRICT除いた全てのエラー定数。設定するにはphp.iniにかく。
error_reporting = E_ALL
→E_STRICT以外全て報告する
error_reporting = E_ALL ^ E_NOTICE ^ E_DEPRECATED
→E_STRICT , E_NOTICE , E_DEPRECATED以外は報告。本番環境用。
error_reporting = E_ALL | E_STRICT
→E_STRICTを含む全てのエラー報告する。開発環境用。
他エラーの設定↓
display_errors = On //開発環境用 エラー表示
display_errors = Off //本番環境用 エラー非表示
log_errors = On //同上 ログ出力する 基本Onで良い!
log_errors = Off
error_log = /var/log/php.log //通常これでいい。ファイル名の指定可能。