もっとちゃんとPHP ~パーフェクトPHPを読んで~一発目
いきなりですが、
今までちゃんとPHPを勉強してきてないじゃまいかという気がすごくしています。
最初に「独習PHP」を読んだ後は、
プロジェクト内の先輩のソースを見たり、マネしたりでここまで来ました。
前回のxdebugを知らなかったりしたのもちゃんと体系的にやってこなかった証拠です。。。
ということで、PHPだったらコレ読んどけとよく聞く「パーフェクトPHP」を読み進めていこうと思います。
Amazon.co.jp: パーフェクトPHP (PERFECT SERIES 3): 小川 雄大, 柄沢 聡太郎, 橋口 誠: 本
以下、読んでく中で
・知らなかったこと
・再確認したこと
・大事なこと
などを備忘録的に残していこうと思います。
一発目は1~3章について・・・
1章 PHP概要
内容
■コーディング規約、OSごとのphp,apache,mysqlのインストール方法など
■PHPの処理の流れ
・PHPの実行形式は2つ
1,モジュール:WEBサーバーと同じプロセスでPHPを実行
2,CGI:WEBサーバーがリクエストに応じて様々なプログラムを実行
モジュール形式の方が基本高速。CGIはリクエストの度にプログラムを破棄されるオーバーヘッドが発生するため。
・コンパイルと実行
PHPはコンパイルの必要がないが、実際に実行される際に内部的にコンパイルされる。
内部コンパイルされたものは「オペコード」。APCはこの「オペコード」をキャッシュすることで高速化している。
このオペコードを実行マシンが実行している。
オペコードはレキサー、パーサーによって生成。
レキサー:PHPプログラムを解析し、構文をばらばらのトークンに分解。
パーサー:レキサーによって生成されたトークンをパースし、オペコードへ変換。
なので、処理の流れとしては、
PHPプログラム→レキサー→トークン生成→パーサー→オペコード生成→実行マシンがオペコードを実行!
2章 PHPの言語仕様
内容
■基本的な構文
・PHPブロック
終了タグは省略可能。予期せぬ終了を防ぐため、HTMLを含まないファイルは終了タグを書かないことが推奨。
・可変変数
$num = 100; $str = 'num'; echo $$str; //100 //先に$strが評価され、'num'に。次に$numで評価されるので、100に・・・
■変数のスコープ
PHPの変数のスコープはグローバル、ローカルスコープの2つ。
・グローバルスコープ:別のファイルなどでも参照可能。
・ローカルスコープ :関数、メソッド内のみ参照可能。外側で定義された変数も参照はできない。
※globalキーワードを使うと、ローカルスコープからグローバルスコープで定義された変数などを参照できる。
しかしこれによって変数の値を変更すると他の場所にも影響を及ぼすので、極力避けるべき。
$mog = 1; fundtion hoge() { global $mog; echo $mog; //1 }
■定数
・define() : グローバルスコープかつ変更不可能。スカラー値のみ。
・const :defineと同様。名前空間を使った時に違いがでる。詳細は追って。。。
・constant():文字列から定数取得
define('MOGMOG', 'sushi'); $str = 'MOGMOG'; echo constant($str); //定義済み定数一覧表示 var_dump(get_defined_constants());
■マジック定数
定数 | 内容 |
_FILE__ | ファイルパス |
__DIR__ | ディレクトリ名 |
__LINE__ | 行数 |
__FUNCTION__ | 関数名 |
__CLASS__ | クラス名 |
__METHOD__ | メソッド名 |
__NAMESPACE__ | 名前空間名 |
■エラー
・パースエラー:PHPの文法間違い(プログラムの実行自体されない)
└セミコロン、括弧が間違っているなど
・実行時のエラー
└定義されていない関数を呼び出すなど(エラーが起きるまでプログラム実行)
・WARNING,NOTICEなど
└WARNING:引数の数、型が合っていないなど(プログラムは実行される)
└NOTICE :変数が初期化されていないなど(プログラムは実行される)
・php.iniの下記の編集することでエラーなどの表示を制御
//エラーを画面に表示 display_errors = On //エラーをログに出力 log_errors = On //エラーログのファイル名 error_log = /var/log/php.log
2章終了。。。
やべー、簡単にメモ書き程度にしようと思っていたのに長くなってしまった・・・
3章までいこうと思ったけどここで一旦切ります。。。
感謝致します。