【バシャログ。10周年企画】kagata が選ぶアップデートしておきたい人気 PHP 記事5選
いろいろあって筋肉や骨の名前にちょっと詳しくなった kagata です。そろそろ自宅に人体模型を置こうかと思っています。思っていません。
さて、期せずして10周年企画のトリを飾ることになってしまいました。最後なので「人気記事5選」にちょっとひねりを加えたい、さてどうしよう…と考えるうち、
「10年もたつと、もはや現状にそぐわない古い記事があるんじゃないか。そして、そんな記事がどういうわけか多く閲覧されて、古い知識を世の中に広めてしまっていたりするんじゃないか。よしここは俺様がそんな古記事をただしてやろう」
と尊大なことを思い立ちました。
実際にやってみたところ、PHP の10年史が垣間見えたり、先達の良記事は今も良記事であることがわかってきたり、いろいろとおもしろい発見がありました。今回はそのまとめをご紹介します。
古い記事をアップデートする
選定基準
まずはアップデートしたい記事を選定するにあたっての基準を決めました。
- PHP をテーマにした記事
→ バシャログのすべての記事を対象にやってみるのもおもしろそうですが、デザイン周辺には詳しくないし、意外に「PHP 記事5選」をまだ誰もやっていなかったので、PHP 関連記事を対象とすることにしました。 - 最近よく閲覧されていること
→ 直近1年での閲覧数を集計しました。「古い内容ながら今もよく閲覧されている記事」を高需要とみなして優先し、「内容が古く今では閲覧されていない記事」はおいておきます。とはいえ、後者にもおもしろいものがあったりはします。 - 最近の PHP 界隈で事情が変わっていること
→ 言語の話題なら PHP のバージョンアップで変更があったとか、ライブラリの話ならもっといいものが出たとか。 - 「サンプルコードに脆弱性がある」は選定基準から除外する
→ これはこれで直したほうがよさそうなものが散見されるのですが、時間の流れを感じるという趣旨から外れるので今回はおいておきます。 - CakePHP1系の記事は除外する
→ これがたくさんあるのですが…最新の3系に準拠した内容にアップデートしようとすると、ただサンプルコードをリライトするだけの面白みのない内容にになりそうだったのでやめました。Cake1系の情報源として、引き続きご愛顧ください…。
では、閲覧数の多いものから順にどうぞ。
10日で覚えるPHPのキソ 第 3 回 配列(連想配列)
2008年春に連載された、PHP 初心者向けの記事のひとつです。表題のとおり配列を取り上げています。この連載はどの記事も引き続きよく閲覧されているようで、入門記事の需要の多さが感じられます。
配列まわりの仕様変更といえば、PHP5.4 で配列宣言の短縮構文 []
が追加されました。
配列の短縮構文が追加されました。$a = [1, 2, 3, 4]; や $a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4]; のように使えます。
単純にコードがすっきりするので、初心者にもぜひ知っておいてほしい構文です。
また、PHP5まで「配列」と「連想配列」は PHP 内部で同じ実装になっていました。PHP7では配列の実装が見直され、それぞれのデータ構造のメリットが生かせるようになっています。ただ、こちらは入門記事向きの話題とはいえないかもしれません。くわしくは下記スライドをご参照ください↓
さらに、記事の中に
array関数を使う(添字指定)
とありますが、厳密には array()
は関数でなく言語構造ですね。
Note:
array()
is a language construct used to represent literal arrays, and not a regular function.
echo
などと違って値を返す(式として評価できる)という点では、初心者のうちは関数と思っても差し支えない…のかもしれません。ただ、以下のようにちょっと込み入ったことをしようとすると、通常の関数とは明らかに異なる挙動をみせます。ステップアップしたあとのことを考えると、やはり「関数」とは呼ばないのがよいかと思います。
<?php
var_dump(function_exists('array')); // -> bool(false)
$function_name = 'array';
var_dump($function_name(1, 2, 3)); // array() は可変関数として呼び出せないので fatal error
10日で覚えるPHPのキソ 第 2 回 変数と定数
こちらも同じ初心者向け連載の記事です。2008年4月公開。
定数を定義することができるのは、define関数 のみです。
PHP5で、クラス定数を定義する const
文が追加されました。さらに PHP5.3からは、従来 define()
で定義していたようなクラスに属さない定数も const
文で定義できるようになりました。
では const
と define()
のどちらを使うべきなのか…を入門記事でどう説明するかは若干難しそうです。
- ひとつの構文を覚えるだけでクラス定数もそうでない定数も宣言できる
- 名前空間の中に入ってくれる
- 関数呼び出しのオーバーヘッドがない
などの利点から、どちらを使ってもよい場面では const
を使う、と覚えてもらえばまずはよさそうです。ただ、それぞれできること・できないことがあり、またその違いがバージョンごとに変わってくるのが厄介です。詳しくは PHP マニュアルの「定数」の項のほか、下記が参考になります。
ちなみに define()
はれっきとした(?)関数です。値を返すし、function_exists('define') === true
だし、可変関数としても呼び出せます。
PHPからデータベースを扱う時に便利な「PEAR::MDB2」
3つめは2009年11月の単発記事から。PHP からデータベースに接続するためのライブラリ PEAR::MDB2を紹介する記事です。
PEAR リポジトリにある MDB2 は2012年10月リリースのβ版を最後に更新が止まっています(安定版は2007年5月、ちょうど10年ですね)。今後は PHP5.1から同梱されている PDO を使うのがよいでしょう。
Packagist には有志がフォークしたと思しき同名のパッケージが公開されています。こちらも新規の開発で使うというよりは、MDB2を利用する古いアプリケーションを生かすためのものと考えたほうがよさそうです。
なお、この記事が今でもよく閲覧されているのは、これから MDB2を使おうという人がたくさんいるというよりも、MDB2を使う古いアプリケーションコードを引き継いだ人が「なんだこれ」と調べ物をしているんじゃないかな…と想像します。
【PHP】strtotime で利用できるパラメータいろいろ
2014年4月公開の、わりと新しめの記事です。 strtotime()
のいわゆる相対書式についての解説記事です。
strtotime()
の解説としては特に内容が古いわけではないのですが、PHP のオブジェクト指向関連機能が強化された今なら DateTime
オブジェクトにも触れておきたい…ということで選んでみました。
PHP5.2で追加された DateTime
オブジェクトでは、コンストラクタや modify
メソッドで strtotime()
と同じ書式が使えます。
さらに、PHP5.5では DateTimeImmutable
オブジェクトが追加されました。イミュータブル、すなわちオブジェクトの内容をあとから変更させない性質を持っています。コンストラクタや modify
メソッドで strtotime()
と同じ書式が使えるのは DateTime
と同様です。
PHP: DateTimeImmutable - Manual
これらをうまく使えば、コードの規模が大きくなったときに楽ができます。ただ、のべつまくなしにオブジェクト指向していればいいってもんじゃないのは PHP - The Wrong Way も述べているところです。適材適所で活用しましょう。
PHPExcelで.xls形式のファイルを扱う
Excel ブックファイルを読み書きするライブラリ PHPExcel の紹介記事です。2009年9月に公開されています。
この記事では PHPExcel の配布元として CodePlex の PHPExcel プロジェクトページ を参照していますが、最新版はここでなく GitHub に移転済みです。
GitHub - PHPOffice/PHPExcel: A pure PHP library for reading and writing spreadsheet files
Packagist には GitHub で公開されているバージョンが登録されています。新規に利用する際は、Composer を使ってこちらのバージョンを導入するのがイマドキでしょう。
phpoffice/phpexcel - Packagist
なお、旧プロジェクトページをホストしている CodePlex 自体も、今年の12月でサービスを終了するとのことです。お疲れ様でした。
Shutting down CodePlex | Brian Harry's blog
むすび
バシャログの PHP 関連の人気記事から、今風にアップデートしたい記事を選んでみました。
アップデート内容の全体を見渡すと、PHP5系での言語機能の強化が目立ちます。そしてライブラリ関連では Composer の普及が印象的です。いまだ現役の PHPExcel だけでなく、時代遅れな感のある MDB2も Packagist から入手できることに驚きました。いずれもここ10年での PHP の大きな変化をよく表しているように感じます。
一方で、明らかに古くさい記事というのは案外少なくて、特によい記事は年を経ても十分読むに堪える印象を受けました。冒頭の初心者向け連載がよい例で、公開から9年を経た今も、連載の各回ともよく読まれています。このあたりの傾向は、今後のネタ選びの参考にできそうです。
ということで、先達の遺産に感謝しつつ、現場で役立つ技術ネタをこれからもお送りしてまいります。どうぞよろしくお願いします。