こんにちは! PHPとバージョンの話をします!
まじめな話はモダンPHPアンチパターンとかFunctoolsを作ったとか健全なpixivは健康なPHPに宿る〜モダンPHPを保つ7つの鍵に書いたので疲れました!
バージョンの話と言ってもPHP7は主役ではありません。
みなさん大好き、php.netのマニュアルに載ってるやつです。
函数をリストアップしよう
ところでphp.netに載ってる函数一覧は http://doc.php.net/downloads/json/php_manual_en.json で取得することができます。php_manual_ja.json
はありません。
これを解釈してやれば、バージョンごとのPHPの函数一覧が作れるんじゃないかな?? 特にベンダー固有のモジュールに載ってる謎DBとかほとんど不要だし、PHP 5.5よりも廃止された函数を視界に入れてやる必要がない。
……そう思った時代が僕にもありました。
0.0.1
0.2.0
None
PHP 4 >= 4.0.2, PHP 5, PHP 7
PHP 4 >= 4.0.6, PECL pdflib >= 1.0.0
PHP 4 >= 4.0.6, PHP 5
PHP 4 >= 4.0.6, PHP 5 <= 5.0.5
PHP 4 >= 4.0.6, PHP 5 <= 5.0.5, PECL mnogosearch >= 1.0.0
PHP 5 < 5.4.0
PHP 5 < 5.4.0, PECL sqlite >= 1.0.3
PHP 5 < 5.4.0, sqlite >= 1.0.0
PHP 5 <= 5.0.5, PECL dbx >= 1.1.0
PHP 5 >= 5.0.2, PHP 7
PHP 5.6
PHP 7, PECL zip >= 1.13.0
PHP >= 5.3.0
PHP >= 5.3.0, PECL fileinfo >= 0.1.0
Unknown
^
こんなんパースできるか馬鹿野郎…!
0.0.1
とか0.2.0
とかNone
とかUnknown
とか^
とかお前らは何者だよ
ちゃんとバージョンが付いてるかに見えるやつでも不等号の方向とか>
とか<=
とか、現状有効なはずの機能でもPHP 7
って付いてたり付いてなかったり、滅茶苦茶です。
仕分け
やりたいのは現在有効なPHP函数を抽出したいだけなので、以下のような分類をしてみます。
PHP 4
PHP 5
PHP 5.4
PHP 5.5
PHP 5.6
PHP 7
-
PECL xxxxx
(PECLモジュール) -
xxxxx
(DB系とかデフォルトでインストールされないモジュール) -
obsolete PHP 4
(PHP 4時代に廃止されたやつ) -
obsolete PHP 5
(PHP 5時代に廃止されたやつ) -
obsolete PHP 7
(PHP 7で廃止されたやつ)
モダンPHPに廃止済み機能は不要なので、綺麗に弾いていきます。
PHP 7で有効な函数にきちんとPHP 7
って書いてあれば良いのですが、残念ながら書いてないものが大半です。obsolete PHP 7
を判定するために、下位互換性のない変更点を参考に自前で廃止函数リストを持つことにしました。ううっ…
ベンダー固有のモジュールみたいなのはベンダーから提供されてるライブラリがないと動かないので、標準構成ではインストールされません。バージョンとは別個に仕分けしていきます。
めんどいのがJSONとかPharとかPECL上がりの標準モジュールで、こいつらも個別対応してます。
ImageMagickは「バージョン情報なし。おそらくSVN版にしか存在しないでしょう」とか意味不明で投げやりな記述があります。
成果物
なんかまだ遺漏いっぱいありそうだけどGistに置きました。
-
phpnet_version_parse.php
JSON吐き出すやつ -
functions.json
個人的に利用しなさそうなモジュール外した -
functions-all.json
ぜんぶ
年末年始のうちに、もうちょっときちんとした成果物としてまとめたいですね ヾ(〃><)ノ゙☆
まとめ
なんかphp.netも浮かれてやがりますね! めりーくりすます。