PHPとバージョン

  • 17
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

こんにちは! PHPとバージョンの話をします!

まじめな話はモダンPHPアンチパターンとかFunctoolsを作ったとか健全なpixivは健康なPHPに宿る〜モダンPHPを保つ7つの鍵に書いたので疲れました!

バージョンの話と言ってもPHP7は主役ではありません。

スクリーンショット 2015-12-24 午後11.34.35.png

みなさん大好き、php.netのマニュアルに載ってるやつです。

函数をリストアップしよう

ところでphp.netに載ってる函数一覧は http://doc.php.net/downloads/json/php_manual_en.json で取得することができます。php_manual_ja.jsonはありません。

これを解釈してやれば、バージョンごとのPHPの函数一覧が作れるんじゃないかな?? 特にベンダー固有のモジュールに載ってる謎DBとかほとんど不要だし、PHP 5.5よりも廃止された函数を視界に入れてやる必要がない。

……そう思った時代が僕にもありました。

https://gist.github.com/zonuexe/80107b7d1d924d3948b7

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版にしか存在しないでしょう」とか意味不明で投げやりな記述があります。

スクリーンショット 2015-12-25 午前1.57.24.png

成果物

なんかまだ遺漏いっぱいありそうだけどGistに置きました。

年末年始のうちに、もうちょっときちんとした成果物としてまとめたいですね ヾ(〃><)ノ゙☆

まとめ

なんかphp.netも浮かれてやがりますね! めりーくりすます。

スクリーンショット 2015-12-24 午後11.36.33.png

この投稿は PHP Advent Calendar 201525日目の記事です。