[Memo]PHP<基本> 2015.08.05
PHP 基本ここでは『独習PHP 第2版』で学んだポイントを箇条書きで記す。
PHPはインタプリタ言語
インタプリタとは逐次翻訳の意で、コンパイルする必要がない
(コンパイル言語は、コンパイラ(ソフトウェア)でコンパイルする必要がある)
をスクリプティングデリミタ、あるいはphpタグという
phpファイル末尾の「?>」は省略できる
文の区切りには、;(セミコロン)を使う
コメントは3種類
HTMLのコメント エンドユーザからも確認できるため、開発者向けのコメントには不向き
// or # 単一行のコメント phpタグ内でのみ使用可 開発者向け
/* */ 複数行のコメント phpタグ内でのみ使用可 開発者向け
変数
変数を宣言する必要はない
可変変数
先頭に$マークを2つ重ねることで、変数名を別の変数の値で動的に決定する
1 2 3 4 5 |
<!--?php $x = 'title'; $title = 'PHP:Hypertext Preprocessor'; print $$x; //結果: PHP:Hypertext Preprocessor ?--> |
可変部分を{}でくくり、「変数名を表す変数」を明確にすることもある。
$$x → ${$x}
定数
値が変化しない数
const 定数名 = 値
定数名は、変数と区別するため大文字にするのが通例
1 2 3 4 5 6 |
<!--?php const TAX = 1.08; $price = 1000; $sum = $price * TAX; print $sum; //結果: 1080 ?--> |
定義済みの定数
__FILE__ → 実行中のファイル名
__DIR__ → 実行中のファイルが存在するフォルダ
__LINE__ → 実行中の行番号
__FUNCTION__ → 実行中の関数名
__CLASS__ → 実行中のクラス名
__METHOD__ → 実行中のメソッド名
__NAMESPACE__ → 現在の名前空間
DIRECTORY_SEPARATOR → フォルダの区切り文字
PATH_SEPARATOR → パスの区切り文字
PHP_VERSION → 使用しているPHPのバージョン
NULL → 未定義
データ型
データの種類
PHPはデータ型に対して寛容な言語
文字列型の変数に整数を入れることも可
スカラー型は、一つの変数で一つの値複合型は、一つの変数で複数の値
スカラー型
論理型(bool,boolean) → TRUEまたはFALSE
整数型(int,integer) → 10進数、16進数、8進数など
浮動小数点型(float,double,real) → 1.8×10308が最大値
文字列型(string) → クォートで囲まれた0個以上の文字の集合
複合型
配列型(array) → データの集合
オブジェクト型(object) → データと手続きの集合
特殊型
リソース型(resourse) → 外部リソースへの参照
ヌル型(null) → 値が未定義であることを表す
論理型
PHPでは、
空文字列、文字列の0
整数型の0
浮動小数点型の0.0
要素数が0の配列
NULL
をFALSEとみなす
文字列型
シングルクォートとダブルクォートの違い
1 2 3 4 5 6 7 8 |
<!--?php $date = '8月2日'; $data1 = "今日は\t「{$date}」です。<br ?-->"; //変数の範囲を明確にするため{~}で囲む $data2 = '今日は\t「{$date}」です。 '; print $data1; print $data2; ?> |
実行結果:
今日は 「8月2日」です。
今日は\t「{$date}」です。
シングルクォート → 変数は展開されない エスケープシーケンス(\t,\n等)
ダブルクォート → 変数は展開される(変数展開または変数のパース(Parse))
文字列は基本的にシングルクォートで囲み、変数やエスケープシーケンスがある場合は、ダブルクォートで囲む
ヒアドキュメント
1 2 3 4 5 6 7 8 |
<!--?php $str = 'ヒアドキュメント'; $msg = <<<EOD 文字列の開始と終了に任意の文字を置いて、文字列を囲むと、<br ?--> 長い文字列を表すのに最適な「{$str}」となります。 EOD; print $msg; ?> |
実行結果:
文字列の開始と終了に任意の文字を置いて、文字列を囲むと、
長い文字列を表すのに最適な「ヒアドキュメント」となります。
配列
配列には、複数の値を収めることができる(複合型)
数値で識別される配列 → 配列(通常配列)
文字列で識別される配列 → 連想配列
1 2 |
$data = array('ドラゴンボール','ワンピース','NARUTO','HUNTER×HUNTER'); print $data[2]; //結果: NARUTO |
$配列名 = array(値1,値2,…)
$配列名[番号] で取り出す
[](ブラケット)で囲った部分をインデックス番号または添え字という(0から数える)
配列の追加と書き換え
1 2 3 4 5 6 7 8 9 10 |
<!--?php $data[0] = 'ドラゴンボール'; $data[1] = 'ワンピース'; $data[2] = 'NARUTO'; $data[3] = 'HUNTER×HUNTER'; $data[0] = 'ブリーチ'; //1番目の要素を書き換え $data[] = '銀魂'; //末尾に要素を追加 $str = "$data[0], $data[4]"; print $str; //結果: ブリーチ,銀魂 ?--> |
print_r命令
1 2 3 4 5 6 7 8 9 10 |
<!--?php $data[0] = 'ドラゴンボール'; $data[1] = 'ワンピース'; $data[2] = 'NARUTO'; $data[3] = 'HUNTER×HUNTER'; $data[0] = 'ブリーチ'; //1番目の要素を書き換え $data[] = '銀魂'; //末尾に要素を追加 $str = "$data[0], $data[4]"; print_r($data); ?--> |
実行結果:
Array ( [0] => ブリーチ [1] => ワンピース [2] => NARUTO [3] => HUNTER×HUNTER [4] => 銀魂 )
連想配列
array(キー1 =>値1,キー2 =>値2,…)
「=>」 → キー名に値を対応させるという意味
1 2 3 4 5 6 7 8 9 10 11 12 |
<!--?php $prefecture = array( '東京' => '東京', '神奈川' => '横浜', '埼玉' => 'さいたま', '千葉' => '千葉', '茨城' => '水戸', '栃木' => '宇都宮', '群馬' => '高崎' ); print $prefecture['茨城']; //結果: 水戸 ?--> |
多次元配列
配列の中に入れ子で配列をつくる
1 2 3 4 5 6 7 8 |
<!--?php $menu = array( array('S コーラ','M コーラ','L コーラ'), array('S オレンジジュース','M オレンジジュース','L オレンジジュース'), array('S アイスティー','M アイスティー','L アイスティー') ); print $menu[2][0]; //結果: S アイスティー ?--> |
連想配列も多次元にできる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<!--?php $literature = array( array( '名前' => '福沢諭吉', '代表作' => '『学問のすゝめ』', '時代' => '明治' ), array( '名前' => '谷崎潤一郎', '代表作' => '『刺青』', '時代' => '大正' ), array( '名前' => '太宰治', '代表作' => '『斜陽』', '時代' => '昭和' ) ); print $literature[2]['名前']; //結果: 太宰治 ?--> |
データ型のキャスト(変換)
暗黙的な変換
PHPでは、その時々の状況に応じて値を適切なデータ型に変換する
そのため、文脈に応じてできるだけなんらかの処理をしようとする
例: 数値の0を論理型のFALSEとみなす
空の文字列「’ ‘」を論理型のFALSEとみなす
明示的な変換(キャスト構文)
厳密な比較や演算の場合、キャスト構文を利用して、値を強制的に特定の型に変換する
(データ型)値
1 2 3 4 5 6 7 8 |
<!--?php var_dump((int)1234.56); // int(1234) var_dump((int)TRUE); // int(1) var_dump((string)TRUE); // string(1) "1" ※'TRUE'は'1’に変換 var_dump((string)FALSE); // string(0) "" ※'FALSE'は''(空文字列)に変換 var_dump((array)1000); // array(1) { [0]=> int(1000) } var_dump((unset)678.9); // NULL ※ヌル型への変換は(unset) ?--> |
var_dump命令は、データ型を出力する