肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

PHP 逆引きレシピ

献本いただきました!ありがとうございます。

6/30に発売された、「PHP逆引きレシピ」、プロの選んだ三ツ星レシピということで、簡単に紹介します!


公式サポートサイト:

PHP逆引きレシピ

総合的な感想

まず、結論から言って、これまでの多くの PHP Tips 本と比べると、かなり質の高い内容となっていると思います。
さすがに実践的にPHPを仕事で使っている方々が書いているだけあって、「ここは普通こうするよね」という当たり前の内容を、きちんとわかっている感じがしています。

基本的な本のつくり

初心者〜中級者向け、といううたい文句ですが、その通りに書かれていると思います。
特に初心者PHPerがよく使うレンタルサーバXREA」「さくらインターネット」「ロリポップ」のそれぞれに対して、拡張機能の対応状況や、設定のポイントなどを紹介しています。

開発環境は、XAMPP/MAMPの他に、PDTの紹介をしています。ここも、ターゲットからすれば統一感のある選択ですね。

あと、文字コードUTF-8に統一してくれたところも素敵ですね。XAMPPの構築方法などがあるので、基本的にはWindows 上で開発することが前提ですが(もちろんMAMPも書いてあるのでMacもですね)、エディタなどはUTF-8を扱えるエディタを紹介してします。

項目、目次ごとに、一つ一つが1〜3ページ程度のTipsで、解説+サンプルコード、実行結果という構成になっています。

非常に良かった点

総合的に見て、良い本ですが、その中でも特に他の書籍と比べてよかった点をあげます。

セキュリティに関する項目がなんと約70ページ

サンプルコードベースで進むこういった本で、セキュリティに関する項目がこれほど充実しているのはすばらしいですね。
また、これが非常によかったという点は、サンプルコード中にセキュリティの問題があるコードがある場合、

このサンプルには脆弱性が含まれています。このファイルは絶対に本番サーバーに
アップロードしないでください。このページを利用して攻撃が可能です。

などと注意書きがあります。(サンプルコード毎回、です!)

これはすばらしい試みだなあ、と思います。こう潔く宣言してコードを載せている書籍はそれほどないのではないでしょうか。

目次のTips以外に、実践的な内容がサンプルの中にちりばめられている

初心者が、言語を勉強するうえで、一つの壁となるのが「PHPの文法はわかった、で、実際仕事で使ってる人たちはどういう風に書いてるの?」を知ることができるか、だと思います。
そういった意味で、職場では、先輩のコードや先生のコードを真似してそういうものを身につけていくのだと思いますが、そういう内容がサンプルコードに結構含まれていると思います。

  • htmlspecialchars を h 関数として定義しなおす *1
  • 文字列操作は基本的に mb 系関数
  • メールのエンコードやヘッダ
  • などなど

また、文字コードの取り扱いについても、CSVファイルを読み込むなどのケースにおいてきちんと書かれています。

最近のトレンドも取り入れている

たとえば、グラフを出力するのに、Google Charts APIの説明をしたり(なんとQRコードも!)、PDF関連ライブラリもいくつか紹介したり。
ファイルの読み書きにきちんと file_(get|put)_contentsを紹介してるのもいいですよね!*2

注意すべき点

あ、批評、という意味ではなく、いくつか、この本を手にする「初心者〜中級者」の方がいたら、参考にしてもらいたいな、という点です。

@$_POST

あ、とはいえこの項目だけはちょっと批判的になってしまうのですがw
例えば、以下のようなコードが多く見うけられました。

<?php
echo nl2br(h(@$_POST['example1']));

これはちょっとないなーと思います。
さらに、

$q = @$_GET['q'];
$q = isset($_GET['q']) ? $_GET['q'] : NULL;

「同じ意味になる。速度に違いがある。」と書かれていましたが、「まてまて」と思ってしまいました。最終的に$qに入るものが同じであることと、コードとして同じ意味であるかは、別じゃないでしょうか。
レシピ167 できちんとそこを書いているのに、他のサンプルコードが適当ではもったいないです。

あくまで、言語の習得ではなく、実践Tips集として

基本的な文法に関するTipsも載っていますが、おまけ程度と考える方が良いと思います。
と、もちろん、サンプルコード+文法紹介、という形なので、参考になることは間違いありませんが、網羅的に紹介したものではないので、「これで実際にコードは書けるようになるけど、PHPの文法や言語仕様について詳しく知ることができるわけではない」という感じですね。
もちろん僕としては、このあたりは批判的に見ているのではなく「初心者〜中級者」というターゲットに大しての本としては、正しい選択かと思います。これを読んだ初心者の方は「文法やPHPの機能」についてはさらに上の本を探して勉強したもらいたいな、と思います。

クラスについても、おまけ程度でしか触れられていません。*3

PHP 5.3 対応」は、「PHP 5.3 の Tipsを含む」ではない

「Windows/Mac 対応  PHP 5.3対応」と記述はありますが、これはあくまで「ここに書かれているサンプルコードは、PHP 5.3で動作しますよ」という意味で、「PHP 5.3 の名前空間・無名関数その他の新しい機能についてのTips含む」という意味ではないということですね。

また、先日の「PHP 5.3 の DateTime オブジェクト関連の便利な新機能 - 肉とご飯と甘いもの @ sotarok」で触れた通り、PHP 5.3 では、マニュアルの流れから言っても、date* 関数よりも、DateTimeオブジェクトを使いましょう的な流れになっている感じを受けますが、日付・暦に関する処理のサンプルは、date関数系を用いていますので、2038年問題なんかも気になるところではないでしょうか。*4 *5


まとめ

と、いうことで、「PHP勉強したいんだけどなにかいい本なにかな。。?」という初心者にオススメできる、良い本です。ボリューム満点ですのでお買い得感もありますね!
ということで。


PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

*1:最近はフレームワークなどでも見られる手法ですね。関数名の長いビルトイン関数を、自分で定義し直すというのは、自分で気づくのが難しい発想の1つだと思います

*2:最近の書籍ではあたりまえなのかな?

*3:例外については一切触れられていません!

*4:この点は、id:shimookさんも触れられていました! http://d.hatena.ne.jp/shimooka/20090704/1246696654

*5:あと細かい点ですが、date 関数や strtotime 関数の第二引数は、「timestamp文字列」ではなく「timestampを表す整数」で、intですよね。自動型変換が行われているだけなので。date関数の呼び出しの第二引数を、わざわざ '1237827055' のようにシングルクオートで囲っているのが気になりました。