『PHP逆引きレシピ 第2版』は何が変わったのか?改訂ポイントをまとめてみるよ

おそらくPHP関連のレシピ集の中でもっとも評価の高い『PHP逆引きレシピ』の改訂版が10/21に翔泳社より発売されました。

間違いなくPHPの書籍の中でNO.1の一冊です。
http://www.amazon.co.jp/review/RDSZUNDEME14R/ref=cm_cr_rdp_perm?ie=UTF8&ASIN=4798119865&linkCode=&nodeID=&tag=
(初版へのAmazonでのレビューより)

今日は、この初版をご存じの方に、第2版の改訂ポイントをまとめてみました。

『PHP逆引きレシピ』とは?

PHP言語を日々実践の場で利用している方々へ贈る、必須のレシピ集であり、また初級レベルのPHP開発者が中級レベルを目指すために必要な秘訣やヒントを一杯詰め込んだ、便利な逆引き本です。

以下のコンセプトの元に作成されました。

  • プログラミング実践上の実用レシピ集
  • PHP初級者を中級者にレベルアップする
  • プログラミング時に「困ったな」という状況に遭ったときに、その躓きやトラブルを”自力解決”できる本
  • 本当に実用度が高い、厳選した使用頻度の高いテクニックを掲載
  • 本当に開発時に必要なものを取り上げる

初版は2009年6月に発売されました。

脱初心者の為の1冊
何冊か入門本を購入して学習しましたが、次に何をすればよいのだろうというのがわかりませんでした。 この本の目次を読んだだけで、PHPで出来るの事の理解の幅がすごく広まりました。 初心者の方は目次を読むだけでもPHPでできる事が参考になるかも。
http://www.amazon.co.jp/review/R2ZGMAXUAIZBTX/ref=cm_cr_pr_perm?ie=UTF8&ASIN=4798119865&linkCode=&nodeID=&tag=
(初版へのAmazonでのレビューより)

改訂の概要

かつての良書も今や糞本
2009年頃はこの本がPHPの本の中で一番優れていたと思うが、今やこの本を買ってPHPに取りかかろうものなら、PHPのバージョンアップの激しさにプログラムが動かなくなるのは時間の問題。特にmysql関数は早急にPDOに改めるべき。名前空間があればなおよいが。また、テストコードが全く書かれていないことが残念だ。
http://www.amazon.co.jp/review/R2WZ31R4EFULKU/ref=cm_cr_rdp_perm?ie=UTF8&ASIN=4798119865&linkCode=&nodeID=&tag=
(初版へのAmazonでのレビューより)

恐らく初版のサンプルの多くが現在の最新のPHP 5.5でも動作すると思います。しかし、PHPの進歩は著しく、多くの新しい機能が追加されており、サンプルコードとしては古くなってしまったり、今ドキではなくなっているものが含まれることは確かです。

発売から4年も経っているため、ある意味やむを得ないのですが、今回の改訂のポイントを一言で言えば、初版のコンセプトはそのままに

『PHP逆引きレシピ』を「今ドキ」なものにアップデートする

ということになります。ちなみに、上記のAmazonのレビューで言及されている点はすべて第2版でカバーされています。

すべてのレシピは再検討されています

詳細な目次だけを比べると、あまり変わっていないように思うかもしれませんが、すべてのレシピは再検討されており、少なくともXHTMLからHTML5にコードが変更されています。

そして、PHPコードも必要なアップデートが多くのレシピでなされています。

章立ては以下のように、必要な新しい章や節を追加し、改訂されています。

.

初版第2版

.

第1章 準備第1章 準備

.

1.1 サーバー環境 1.1 サーバー環境

.

1.2 開発環境 1.2 開発環境

.

1.3 本番環境

.

.

第2章 PHPの基本構文第2章 PHPの基本構文

.

2.1 変数 2.1 変数

.

2.2 定数 2.2 定数

.

2.3 条件分岐 2.3 条件分岐

.

2.4 繰り返し処理 2.4 繰り返し処理

.

2.5 関数 2.5 関数

.

2.6 ファイルのインクルード 2.6 ファイルのインクルード

.

2.7 エラー処理 2.7 エラー処理

.

.

第3章 PHPの基本テクニック第3章 PHPの基本テクニック

.

3.1 文字列 3.1 文字列

.

3.2 数値 3.2 数値

.

3.3 日付時刻 3.3 日付時刻

.

3.4 配列 3.4 配列

.

3.5 PHPの設定 3.5 PHPの設定

.

3.6 ベンチマーク 3.6 ベンチマーク

.

3.7 コマンドライン

.

.

第4章 ファイルとディレクトリ第4章 ファイルとディレクトリ

.

4.1 ファイル 4.1 ファイル

.

4.2 ディレクトリ 4.2 ディレクトリ

.

4.3 PDFファイル 4.3 PDFファイル

.

4.4 CSVファイル 4.4 CSVファイル

.

4.5 画像ファイル 4.5 画像ファイル

.

4.6 グラフ

.

.

第7章 クラスとオブジェクト第5章 クラスとオブジェクト

.

7.1 クラスの基礎 5.1 クラスの基礎

.

5.2 クラスの活用

.

5.3 名前空間

.

5.4 例外処理

.

5.5 SPL

.

.

第5章 PEARとSmarty第6章 ライブラリ

.

5.1 PEARの使い方 6.1 PEARの使い方

.

6.2 Composerの使い方

.

5.2 Smartyの使い方 6.3 Smartyの使い方

.

6.4 フレームワーク

.

.

第6章 Webプログラミング第7章 Webプログラミング

.

6.1 フォームの基礎 7.1 フォームの基礎

.

6.2 フォームの実際 7.2 フォームの実際

.

6.3 入力データの加工 7.3 入力データの加工

.

7.4 データ出力時の処理

.

6.4 Cookie 7.5 Cookie

.

6.5 セッション 7.6 セッション

.

6.6 ファイルアップロード 7.7 ファイルアップロード

.

6.7 メール処理 7.8 メール処理

.

6.8 ネットワーク 7.9 ネットワーク

.

6.9 HTTPヘッダー 7.10 HTTPヘッダー

.

6.10 データベース(MySQL)

.

7.11 Web API

.

6.11 その他 7.12 その他

.

.

第8章 データベース

.

8.1 phpMyAdmin

.

8.2 データベース(PDO)

.

.

第9章 自動テスト

.

9.1 ユニットテスト

.

9.2 ブラウザテスト

.

.

第8章 セキュリティ第10章 セキュリティ

.

8.1 セキュリティ対策の基本 10.1 セキュリティ対策の基本

.

8.2 PHPの設定 10.2 PHPの設定

.

8.3 セキュリティ対策 10.3 セキュリティ対策

.

.

第9章 トラブルシューティング第11章 トラブルシューティング

.

9.1 エラー表示など 11.1 エラー表示など

.

9.2 文字化け 11.2 文字化け

.

.

第10章 アプリケーション編

.

10.1 phpMyAdmin

.

10.2 WordPress

.

10.3 MyNETS

ページ数の関係で、初版の「第10章 アプリケーション編」は削除せざるを得ませんでしたが、そこに記載されていたレンタルサーバに関する多くのことは、第2版では「1.3 本番環境」や「8.1 phpMyAdmin」に移動して残っています。

主な改訂ポイント

対応PHPバージョン

初版は、PHP 4/5.2/5.3対応でしかも、5.3はサンプルが動作するだけでした。しかし、今ドキにアップデートされた第2版では、PHP 5.3以降を対象としており、PHP 5.3/5.4/5.5対応で、5.3の新機能はもちろん、5.4、5.5の新機能についても必要と思われるものを追加しています。

Eclipse/PDTからNetBeansへ

PHP初級者の方にとって総合的にみて、NetBeansのほうがとっつきやすいだろうとの判断から、IDEをNetBeansに変更しました。ただし、IDEを前提とした書籍ではありませんのでEclipseや他のIDE/エディタのユーザだと役に立たないということは全くありません。

また、NetBeansによるステップ実行でのデバッグ方法(リモートデバッグ)の解説も加えました。

オブジェクト指向の解説の強化

PHPでのオブジェクト指向の普及に合わせて、オブジェクト指向に関するレシピを大幅に増やしました。以下のレシピが追加されています。

  5.2 クラスの活用
    158 静的メソッド、静的プロパティって何ですか?  
    159 オートロードって何ですか?  
    160 「self::」「parent::」「static::」とは何ですか?  
    161 クラス内で定数を使用したい  
    162 マジックメソッドって何ですか?  
    163 オブジェクトを保存したい  
    164 タイプヒンティングとは何ですか?  
    165 抽象クラスとは何ですか?  
    166 インターフェイスとは何ですか?  
  5.3 名前空間
    167 名前空間とは何ですか?  
    168 名前空間の記述を短くしたい  
  5.4 例外処理
    169 例外処理とは何ですか?  
    170 複数の例外を分けて処理したい  
    171 通常のエラーを例外で処理したい  
  5.5 SPL
    172 SPLって何ですか?  
    173 オブジェクトを配列のように扱いたい  
    174 イテレータって何ですか?  

また、Composerの基本的な使い方やフレームワークの紹介も加えました。

データベース

データベースに関しては、初版では古い環境をサポートするためにMySQL(MySQL関数)だったため、

PHP逆引きレシピは概ね良いが、SQLインジェクションに関しては残念なことに
http://d.hatena.ne.jp/ockeghem/20090711/p1

とのご指摘を受けましたが、今回はPHP 5.3以降ということで、PDOを使いMySQLおよびSQLiteで動作するようにすべて書き直し、きちんとプリペアドステートメントを使うようにしています。

Web API/JSON/XML

初版では扱いがなかった、Web API、JSON、XMLに関するレシピも追加されています。

  7.11 Web API
    240 JSON形式のデータを返すWeb APIを作りたい  
    241 RSSやXML文書を解析したい  
    242 JSON形式のデータを返すWeb APIを利用したい  

テスト

また、自動テストとして、PHPUnitでの、ユニットテストとSeleniumを使ったブラウザテストについてのレシピも追加しました。

ボリュームアップしてさらにお得感もアップ

第2版では、ページ数がさらに増えています。

初版 第2版 増加率 増加数
レシピ数 261 315 +20.7% +54レシピ
ページ数 768 896 +16.7% +128ページ

しかし、価格は200円アップの2800円(+消費税)です。

そして、

最後の索引ページを強化してくれたらもっとよかったです。
http://www.amazon.co.jp/review/R20KNB0E0ZETP2/ref=cm_cr_rdp_perm?ie=UTF8&ASIN=4798119865&linkCode=&nodeID=&tag=
(初版へのAmazonでのレビューより)

という不満にも対応し、索引数はほぼ倍増しています。

初版 第2版 増加率 増加数
索引数 916 1,743 +90.3% +827語

余談ですが、たぶん、これだけのページ数のPHPの書籍が出せるのは今回が最後だと思います。 書店で見かけたら、是非、手に取ってその重さ厚みをお確かめください。

実は、この第2版は900ページ越えの予定で作成しておりました。しかし、再校校正の最中に出版社の社内会議でページ数が多すぎるということで決裁が通らず、まさかの再校でページ数を減らすという事態に陥りました。

ページ数を19ページ減らし、ようやく出版にこぎつけました。

本当にすばらしい本になりました

私が言うのもなんですが、初版もかなりの品質の本でしたが、この第2版の品質は初版をはるかに超えていると思います。

細部までものすごく手が込んでいます。初版と同じく3つのレンタルサーバでサンプルの動作を確認している点はもちろん(他にもWindows/Mac/Linuxでも動作確認しています)、記述自体はさらっとしていますが、実は、PHPのソースコードまで追っかけて確認していることもあります。

執筆中に発見したPHPやPHPマニュアルのバグを報告したのも一度や二度ではありません。 6人の執筆者が10か月近くかけただけのことはある内容です。

すべての初版の読者に自信を持ってお薦めできる書籍に仕上がりました。書店で見かけられましたら、是非、手に取ってみてください。

ちなみに、この『PHP逆引きレシピ』は初版もそうですが、名古屋発祥の本です。

関連

Date: 2013/10/22

Tags: php, book