PHPのメモ

省略形

<?=’〜’?>

<?php echo '~' ?>
<?php print '~' ?>

// 省略した記述(内部的にはechoとして扱われている)
<?='~'?>

コメントアウト

1. <?php 〜 ?>内では使用できない
<!-- 〜 -->

2. 単一行。エンドユーザーには見えない。「#」は属性とも判別がしにくいので「//」で統一するのが良い。
// 〜
# 〜

3. 複数行
/* 〜 */

命名規則

変数

No.規則×
1「$名前」$namename
2名前の先頭は、任意の文字かアンダースコア(_)$name, $_name$123, $1name
3名前の2文字目以降は、「2」に加えて数値を利用してもOK。$name_11, $_name11$name-11
4大文字/小文字は区別される$name, $Name

予約語は先頭の「$」で区別できるので使用できますが、混乱を招くので使用するべきではありません。定数、関数、クラスの名前ではそもそも予約語の利用は禁止です。

名前の記法について

PHPでは以下の記法が一般的。記法を統一することで、記法自体が識別子の役割を表現できるので統一するのがおすすめ。

記法
変数/関数キャメルケース$userName
定数大文字のアンダースコア記法
※先頭の「$」は不要
USER_NAME
クラスパスカルケース$UserName

データ型

種類

大きく以下3種類に分類される。

  • スカラー型
  • 複合型
  • 特殊型

スカラー型

論理型(bool)ture, false
整数型(int)10進数, 16進数, 8進数 etc…
浮動小数点型(float, double)1.8×10308が最大値(プラットフォームに依存します)
文字列型(string)「’」or「”」で囲まれた0個以上の文字

複合型

配列型(array)データの集合
オブジェクト型(object)データと処理の集合
コールバック型(callable)あとで呼び出される処理

特殊型

リソース型(resource)外部リソースへの参照
ヌル型(null)null = 値が未定義である

数値セパレーター

PHP7.4以降、数値リテラルの中に桁区切り文字(_)を記述できるようになった。

// 「1234567」という数値を「1_234_567」と記述できる。
$value = 1_234_567;

文字列

ヒアドキュメント

「<<<○○○」〜「○○○;」までを1つの文字列リテラルとしてみなします。「○○○」は文字列の開始と終了を表すためのデリミタ(区切り文字)なので、一致していればいい。小文字で表記してもいいが、文字列リテラルそのものと識別しやすいようにすべて大文字で表記するのが一般的。

よく使用されるのは「EOM」「EOF」「EOD」。「EOM」は End Of Message、「EOF」は End Of File、「EOD」は End Of Document の略。

// 正しい例
<?php
$msg = <<<EOD
  ヒアドキュメントとは改行を含むような長い文字列を表すのに適した記法です。<br>
  終了文字列(EOD)のインデント位置によって、先頭部分の空白が除去されます。<br>
  終了文字列よりもインデントが少ない行があるとエラーになります。
EOD;
?>

// エラーになる例
<?php
$msg = <<<EOD
  ヒアドキュメントとは改行を含むような長い文字列を表すのに適した記法です。<br>
  終了文字列のインデント位置によって、先頭部分の空白が除去されます。<br>
終了文字列よりもインデントが少ない行があるとエラーになります。
  EOD;
?>

// 開始文字列(EOD)の書き方には3つある
//
// 1. <<<EOD
// 2. <<<"EOD"
// 3. <<<'EOD'
//
// 1と2は文字列に含まれる変数やエスケープシーケンスを展開できるが、
// 3は展開できない。3の構文は「NowDoc構文」と呼ばれる。

配列

連想配列

<?php
$members = [
  'user1' => 'address1',
  'user3' => 'address3',
  'user4' => 'address4',
  'user5' => 'address5',
];
print $members['user1'];
?>

多次元配列

<?php
$data = [
  ['user1', 'user2', 'user3'],
  ['food1', 'food2', 'food3'],
  ['place1', 'place2', 'place3'],
];
print $data[0][1];
?>

キャスト(データ型の明示的な変換)

厳密な比較や演算をしたい場合は、キャストという仕組みを利用することで、値を特定の型に強制的に変換できます。

// 構文
(データ型)値
データ型概要
(int), (integer)整数型に変換
(bool), (boolean)論理型に変換
(float), (double)浮動小数点型に変換
(string)文字列型に変換
(binary)バイナリ文字列に変換
(array)配列に変換
(object)オブジェクトに変換
var_dump((int)123.56);    // 実行結果:int(123)
var_dump((int)-123.56);   // 実行結果:int(-123)
var_dump((int)true);      // 実行結果:int(1)
var_dump((int)false);     // 実行結果:int(0)
var_dump((string)true);   // 実行結果:string(1) "1"
var_dump((string)false);  // 実行結果:string(0) ""
var_dump((array)101);     // 実行結果:array(1) { [0]=> int(101) }

文字列から数値へのキャスト時の注意

文字列から数値へのキャストの際、2進数, 8進数, 16進数表現の文字列をキャストするには以下のような関数を使用する必要がある。

関数概要
bindec()2進数→10進数
octdec()8進数→10進数
hexdec()16進数→10進数
$data1 = '0b1011010'; // 2進数
$data2 = '0132';      // 8進数
$data3 = '0x5A';      // 16進数
var_dump((int)bindec($data1)); // 出力結果:int(90)
var_dump((int)octdec($data2)); // 出力結果:int(90)
var_dump((int)hexdec($data3)); // 出力結果:int(90)