レベルアップPHP ~言語を理解して中級者へ~【読書メモ】
GW中にKindleセールを漁っていて、ふと目に留まりました。
レビューも高評価だったのでさっそく購入し、読んだメモです。
どんな本?
PHP言語そのものについて、初心者向けの本では触れない範囲まで深掘りした本。
特定のフレームワークに依存していなくて読みやすい。
なんで読もうと思ったのか
・「本書の読者対象」の中にあった「昔のPHPは使っていたが、最近のPHPはわからない方」というフレーズがドンピシャだったため
・最近まったくコードを書いていない浦島太郎状態なので、なんとかするためのとっかかりになればと思った
目次
・第1章:型別に理解する変数の扱い方
・第2章:変数のスコープと特別な変数・定数
・第3章:型の変換
・第4章:(PHP7) 型宣言
・第5章:(PHP5.3)名前空間
・第6章:(PHP5.3)オートロード
・第7章:外部ライブラリーの活用
・第8章:(PHP7)エラーと例外
・第9章:アーキテクチャー
・第10章:PSRコーディングガイドライン
・第11章:正規表現を楽しもう
・第12章:テンプレートエンジン
・第13章:パフォーマンスとデバッグ
・第14章:PHPとバージョンアップ
・第15章:良質なPHP情報を得るには?
・第16章:Hack/HHVMとPHP
・付録A:(PHP5.4) ビルトインウェブサーバー
・付録B:PHPエンジニアとサーバーサイド
・付録C:静的コード解析と周辺ツール
・付録D:セキュリティー
特に勉強になったところ
■ zval構造体
・PHP7 はPHP5系に比べて圧倒的にパフォーマンスが向上した
変数を管理するためのデータ構造(= zval構造体)が効率化されたため
■ 無名クラス (PHP7.0〜)
・無名クラスで作成したインスタンスもオブジェクトに該当する
・本書によると、無名クラスは以下を書きたい場合に重宝するらしい
・簡単なインラインバッチ
・即席のインスタントクラス
・使い捨ての単体テスト
・書き方の違いはこんな感じ
▼ PHP 7 より前のバージョン
<?php
class Logger
{
public function log($msg)
{
echo $msg;
}
}
$util->setLogger(new Logger());
▼ PHP 7 以降のバージョン
$util->setLogger(new class {
public function log($msg)
{
echo $msg;
}
});
参考:PHP: 無名クラス - Manual
■ ?? ←Null合体演算子 (PHP7.0〜)
・変数が未定義 or NULL であれば初期値を与える演算子
・if文で書くと長くなるから三項演算子で書いてたけど、これを使えばさらに短く書けてよさそう
・書き方の違いはこんな感じ
▼ PHP 7 より前のバージョン
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
echo $username. PHP_EOL; // nobody
▼ PHP 7 以降のバージョン
$username = $_GET['user'] ?? 'nobody';
echo $username. PHP_EOL; // nobody
■ 型宣言 (PHP7.0〜)
・関数の引数に対する型宣言
・PHP5系でタイプヒンディングと呼ばれていたものと同じ。PHP7からは呼び名が統一された。
・PHP7.0〜 は整数型や文字列型なども使えるようになった
・宣言した型以外を引数に渡すとFatal errorになる。
・本書によると、型宣言のメリットは以下のとおり
・想定外の引数を受け取るとエラーになるため、不具合を早めに検知できる
・関数の制作者が引数に求める意図を明示できる
・型が保証されていることによって、関数の引数チェックを簡易化できる
// 引数の変数の前に書いてある部分が型宣言。以下の場合は整数型
function echoNumber (int $int) {
echo $int. PHP_EOL;
}
// 以下は文字列を引数に指定しているので、実行するとFatal Error
echoNumber('test');
■ assertによる簡易テスト (PHP7.0〜)
・想定どおりにプログラミングしていれば起こり得ないことを書くのがassert
・assertに引っ掛かったら、プログラムのバグとみなし例外を投げて処理を止めたほうがいい。
感想
説明文だけではなく、具体的にコードを書いてくれているから理解しやすい。
忘れてしまったPHPの振る舞いを都度ググって思い出すよりも、本書を読み返す方が非常に効果的だと思います。
参考になるURLをたくさん貼ってくれているから、探し回る手間が省けます。著者のやさしさを感じる...!
さらに、電子版はそのままリンクに飛べるからめっちゃ楽です。
「この機能はどういう場面で使うんだろう?」というところまでフォローしてくれるのでイメージがつきやすく、理解が深まりました。
PHPerは手元に置いておくと安心な一冊だと思います。とてもおすすめ!