近況報告
エンジニア転職成功しました。YouTubeでエンジニア転職したい方向けに情報発信しています。
独習PHP第3版を学んでいるYUUKIです。
あまりデータ型について深い仕組みを知らなかったのですが、独習PHPを実践してみて初めて目にする情報も多かったのでまとめます。
PHPで扱うデータ型について
- PHPは変数でデータ型をあまり意識しない
- Java,C#のような言語は変数に数字をセット出来ないなどの制限がある
PHPで扱うことが出来る主なデータ型
- スカラー型 一つの変数に一つの値だけを扱うことができる
- 論理型
- 整数型
- 浮動小数点型
- 文字列型
- 複合型 一つの変数に複数の値をまとめて扱える
- 配列型
- オブジェクト型
- 特殊型 スカラー型にも複合型にも属さない
- リソース型
- ヌル型
リテラルとは
変数に格納できる値そのもの、または値をスクリプトの中で表現する方法のこと。
論理リテラル(bool)
- 真(true)が偽(false)のいずれかの状態しか持たない
- true、falseは大文字小文字を区別しない。(TRUE,FALSEでも通る)
PHPでFalseとみなす状況
- 空文字列、または文字列の0
- 整数リテラルの0
- 浮動小数点リテラルの0.0
- 要素数が0
- null(未定義)
例として、空文字("")の戻り値はfalse
整数リテラル(int)
- 正数、負数、ゼロを表現できる
- 2進数、8進数、16進数も表現できるが、先頭に接頭辞(0b,0,0x)を付ける必要がある
整数リテラルの分類
- 10進数リテラル(0,3,-12)
- 2進数リテラル(0b1111,0b101)→15,5
- 8進数リテラル(0777,0644,0600)→511,384,255
16進数リテラル(0xFF,0xAA00BB)→255,11176140
進数表記に削ぐわない(2進数で121、8進数で191など)場合はエラーとなるので注意。
浮動小数点リテラル(float)
- 指数表現を使った浮動小数点を使うことができる
- 指数表現→「仮数部 e 符号部 指数部」の形式で表せるリテラルのこと
- 例→3.548E5 = 3.458 * 10の二乗。 1.1414e-3 = 1.1414 * 10の-3乗を表す
浮動小数点リテラルも整数リテラルもPHPからしたら数値として変わらない為、どちらか好きな表現を選ぶ
文字列リテラル
文字列リテラルは文字列をシングルクォート''、ダブルクォート""のどちらかで囲んで使用する
①文字列の中にシングルクォート、ダブルクォートを使いたい場合
<?php
$str = "isn't it php"; ##ダブルクォーテーションで'を囲む
$sendMail = 'Hello, I'm "YUUKI"'; ##シングルクォーテーションで"を囲む
print $str."<br>";
print $sendMail;
//結果'がきちんと表示されている
isn't it php
Hello, I'm "YUUKI"
②""と''を両方含めたい場合→クォート文字をエスケープ処理する
- エスケープ処理とは? 特殊文字を変換し、無効化すること
例えば、以下のように、''の中に、'と"を両方含んだコードだと構文エラーとなる
$str = 'Hello, I'm "Yuuki", You're Name? ';
なぜなら、''や""で一つの文字の塊とみなす為、間の文字が文字列として認識されない為。
今回の場合は、'を特別な意味を持たないただの文字列に変換します。
$str = 'Hello, I\'m "Yuuki", You\'re Name? '; //''の中にある'をエスケープ処理する
これでOK。
PHPではエスケープ処理を行いたいリテラルの前に、(バックスラッシュ)を使います。
シングルクォートとダブルクォートの違い
PHPのダブルクォーテーション("")とシングルクォーテーション('')の違いを理解する
エスケープシーケンスについて
「\文字」のように、改行やタブなど特殊な意味を持つ文字を「エスケープシーケンス」と呼ぶ。
PHPで主に使われるエスケープシーケンスは以下
- \r キャリッジリターン
- \n 改行
- \t 水平タブ
- \v 垂直タブ
- \f フォームフィード
- \$ ドル記号
- \ バックスラッシュ
- \" ダブルクォート
- \nnn 3桁の8進数
- \xnn 2桁の16進数
- \U{nnnn} 4桁の16進数(Unicode文字 7.0から採用)
ヒアドキュメント
複数行含めて文字列をリテラルを表す仕組みのこと
- 文字列リテラルの始まりと終わりを<<<EOD 中身 EOD; と表す
- EODで括った部分は全て文字列リテラルとみなす
- EODは開始と終了を表すためのデリミタ(区切り文字)
- EOD以外にも、<<<CONTENT~CONTENT;や、<<<HOGEHOGE ~ HOGEHOGE;などがある
- 開始/終了文字列は小文字で表記してもいいが、文字列リテラルと識別できるようにしておくため、大文字で表すのが一般的
例
<?php
$str = 'PHP とは Hypertext Preprocessorの略だよ';
$msg = <<<EOD
${str}。サーバーサイドで動作するスクリプト言語で、<br/>
DB連携やSMTP通信もできるので、フロントエンド言語に比べて汎用性が高いです。<br/>
'Let's start, everyone!'
EOD;
print $msg;
出力結果
このように、エスケープせずとも、複数行を文字列リテラルにすることで、変数展開や``を気にせず使えます。便利ですね。
なお、EOD;の行に空白やタブ文字を含めるとエラーが起きるので注意。
ヌル(null)
最後にnull型。
ある変数が値を持たないことを意味し、唯一のリテラルとしてnullをもつ。
次の条件で、変数はnullであると見なされる。
- 変数に値が代入されていない
- 変数に明示的にnullが代入された場合
- unset命令で変数の内容が破棄された場合
例
$nullStr; //値が代入されていない
$nullStr2 = null; //nullを明示的に代入している
$nullStr3 = "nullではない"; // 文字列リテラルを代入
unset($nullStr3); //$nullStr3をアンセット
print $nullStr3; //空なのでnull(表示されない)
次回は、phpの配列についても詳しくみていきます。