PHPマニュアルの関数リファレンスを隅から隅までざっと読んでみた
知らない関数や機能をなくしたい!
PHPの歴史って長くて、その間に付けたし付けたしでどんどん関数が増えていき、PECLモジュールもかなりの数になっている。
なので、普段PHPをよく使っている人でも、結構知らない関数や機能があったりする。かくいう自分もちょくちょく新しい関数を発見して、その都度「もっと早くに知っていれば」という悔しい思いをしていたんだけど、この度
PHPマニュアルの関数リファレンスを全部読んで、知らない関数や機能を発見しよう!
と思いついたので、実行してみた。
注意事項
以下、筆者が知らなかった、あるいは知っていたけど載せる価値がある、と思ったものを載せているので、読んでいる方にとって自明の事であったり、あるいはここに載っていないけど読んでいる方にとって知らないものとかがあるかもしれない。
と言う事で、善良なPHPerの皆さんは、各自でマニュアルを読み込む事をお勧めする。
Affecting PHP’s Behaviour
PHPの動作に影響を与えるものたちが色々と。
自分はAPDの存在すら知らなかった。しょっぱなからダメだ・・・
エンコーダー関連の実装っていくつもあるよね。PHP bytecode CompilerやBlenc – BLowfish ENCoder for PHP source scriptsなど。
Inclusion hierarchy viewerはデバッグにちょっと便利かなと思った。どのファイルをincludeしてるか分かる。
runkitはdefineで定義した定数を後から変更したり出来るらしい。テスト環境で値を上書きしたい場合とかは便利かもしれないけど、本番環境で使うと色々まずそうな気がする。
Break the silence operatorなんていう怪しいのも発見。@でエラー抑制をするのを無効化する。実にPHPらしい発想ではないか。
Weak Referencesの中にはJavaのWeakHashMapみたいなのもある。
Hierarchical Profilerなんていうプロファイラーもあるが、そもそもWebアプリだとあまり使ったことないかな。プロファイラーって。
Audio Formats Manipulation
オーディオファイルフォーマット関連。
ID3 Tagsとか。ID3タグの編集?それ、PHPで出来るよ。
KTaglibなんてのもある。ID3じゃなくてOggタグの編集?それ(ry
Authentication Services
KerberosとRadiusの実装。あればあったで嬉しいかもしれないけど、まぁ使わないかな。
Credit Card Processing
こういうのって、そもそも言語の拡張として入れるべきものなのか・・・PHPらしいといえばそれまでだけど。
Cryptography Extensions
この辺は、認証系を実装するならしっておくべきか。
Cracklibはパスワードの強度をチェックするやつ。まぁ最近パスワード認証が徐々に減ってきたから、これを使う機会は減ってきたと思うけど。
HASH Message Digest Frameworkには、md5, sha1以外に色々あるよ。
Database Extensions
前世紀末位からPHPが爆発的に普及したのは、DBアクセスが手軽に出来るというのも理由の1つだった。DB関連はPHPの基本中の基本の機能なんだけど、MongoDBに対応してたの、知らなかった。
Date and Time Related Extensions
IMHO、PHPの日付時刻関連の関数は使いづらい。いいライブラリーないのかなー。とりあえず、どんな関数があるかは頭に入れておくべし。
File System Related Extensions
Fileinfoは、ファイルの種類とかの情報を取得できる。これは前から知ってたけど、webアプリではアップロードされたファイルのチェックとかでまぁまぁ使うと思うので載せとく。
Inotifyはiが先頭についてるからと言って、Appleは関係ない。というか、inotifyってものの存在自体知らなかった・・・
Human Language and Character Encoding Support
おなじみのmb_string関連とか、Gettextやintl等のi18nサポートなど。
Pspellってのは知らなかった。日本語のaspellの辞書を使えば、日本語のスペルチェックも出来るっぽい。あまり使う場面はないかなー。
Mathematical Extensions
数学やるなら別の言語使ったほうがいいと思う。
Process Control Extensions
え、pthreads使えるんだ。知らなかった・・・と思ったら、ここで言うpthreads ≠ POSIX Threads だそうだ。
しかしまぁ、PHPでスレッドが実用的になっていたとは知らなかった。多分、使わないけど・・・
Other Basic Extensions
GeoIP
これは前から知ってたけど、Webアプリを作る時に使うことが結構あると思うので、知らない人のために一応載せとく。
FANN (Fast Artificial Neural Network)
PHPでニューラルネットが使えるのか!でも、やっぱPythonとかR使うからいらないや。
Miscellaneous Functions
「お前ら!『Miscellaneous』と十把一絡にまとめられた関数共の気持ちを考えた事あんのかよ!」
と言いたくなる気持ちを押さえて、意外に知られていないと思うものを幾つか紹介。
まずはget_browser。オレオレUA判別関数を使っていいのは小学生まで(ry 今の今までこの関数知らなかったよ。すみません・・・browscap.iniファイルはこちらのサイトから取得する。
次は、time_nanosleep。sleep関数は秒単位だけど、nano秒単位でもsleep出来るよ。PHPならね(言ってみたかっただけ)。
Standard PHP Library (SPL)
主要なIteratorとかExceptionくらいは覚えておいたほうが良いよなー、とか思って眺めてたら・・・
The SplFileInfo class なんてものを発見。ファイルの拡張子とかディレクトリとかファイル名とか取り出す処理ってよくやると思うけど、SPLの中にこんなクラスがあったのか。勉強不足を痛感。
SPL Type Handling
experimentalだけど、強い型付けも使えるようにしようとしてるのかな。そこまでしてPHP使いたくないなぁ。
Taint
変数がXSSやSQLインジェクションで汚染されている可能性があるかどうかをチェックしてくれる。どれくらい使われてるんだろう。
Other Services
色んなサーバーとかプロトコルのPHP実装。
Gearman
Gearmanのラッパー。別のマシンにジョブを投げたり出来るんだそうだ。多分使わないけど、存在自体知らなかったので載せとく。
Net Gopher
おっさんエンジニアには懐かしい。Go言語のマスコットとは違うから。
PHP / Java Integration
ここまで来ると、何を言ってるのかさっぱり分からん・・・
Memcache と Memcached
これらの2つは別物なので注意。どう違うかって?ggrks
Search Engine Extensions
検索エンジン関連す。
Apache Solr
比較的使うとしたらこれ。ただし、古いSolrのバージョンにしか対応していない。回避方法は昔のブログ記事を参照。
Variable and Type Related Extensions
Array関連の関数は沢山あるので、余り使わないのも多いけど、一通り目を通しておくことをオヌヌメ。
Filter
これを知らなかったのが、このブログ記事を書くきっかけ。変数の値が、指定した形式かどうか(IPアドレス、メールアドレス、URL etc.)をチェックしたりしてくれる。フィルター一覧はこの辺。
Quickhash
強い型付のhashやsetの実装、らしい。使うかなぁ。
Reflection
良い子のみんなは多用しないように。
Web Services
Webサービス関連。
OAuth
こんなのもあるのね。通常は、自分達が対応するOAuthプロバイダー(Twitterとか)が出してるSDKを使うことが多いから、あまり使う機会はなさそうだけど、知ってて損はないかも。
SOAP
SOAPは、エンタープライズ系だと今でもたまに使うんだよね。クライアントとして使う分にはJavaより便利な気がする。
XML Manipulation
PHPにはXMLやDOM関連の色んなモジュールがあるんだけど、どれもイマイチ使いやすくないんだよね・・・
おわりに
以上、駆け足でPHPマニュアルの関数リファレンスをざっと読んで、自分が知らなかったもの、意外に知られていないと思われるものを紹介してきた。
これだけ多種多様な機能が、言語標準、あるいはPECLモジュールで提供されていて、PHP凄い・・・のかな。でも、こうした豊富な機能も、存在を知らなければ宝の持ち腐れ。ということで、PHPでプログラムを書く人は、一通り関数リファレンスを流し読みしておく事をお勧めする。