php5.4 以下で php5.5 の関数を使う(polyfill)
前置き
array_column
, password_hash
とかそういうのを php5.4 以下でも使えるようにする話。
※ polyfill っていうと js なイメージがあるのはなんでなんだぜ?
php5.4 自体のサポートは切れていますが、RHEL/CentOS 7 がサポートしているので、まだ使う機会は多いんじゃないかと思ってます。
お手製 polyfill をどこかにまとめて UP しようとしたら既に Symfony が 公開していたので紹介します。
symfony/polyfill
php5.5 に限らず、様々な polyfill をまとめ上げたパッケージです。
有用だと思いますが、今私が欲しいのは 5.5 の関数群だけなので割愛。
symfony/polyfill-php55
上記の symfony/polyfill の中でも使われている、php5.5 用の単独パッケージです。
これを使います。
インストール
普通の composer 利用でOK.
composer.json
"require": {
"symfony/polyfill-php55": "*"
}
ソースを見るとわかりますが、 autoload/files
が指定されているため、特別なことはしなくてもグローバルに定義されます。
確認
test.php
require_once "vendor/autoload.php";
// バージョン確認
echo 'PHP_VERSION: ', PHP_VERSION, PHP_EOL;
// password_*
$hashed = password_hash('hoge', PASSWORD_DEFAULT);
echo 'password_hash: ', $hashed, PHP_EOL;
echo 'password_verify: ';
var_dump(boolval(password_verify('hoge', $hashed)));
// array_coloumn
echo 'array_column: ';
print_r(array_column([
[
'a' => 'hoge',
'b' => 'key1',
],
[
'a' => 'fuga',
'b' => 'key2',
],
[
'a' => 'piyo',
'b' => 'key3',
],
], 'a', 'b'));
出力
PHP_VERSION: 5.4.44
password_hash: $2y$10$KPVQTltfGoFpLwMtKsOvm.MFqxmwVqWJsmUR/KwJRMRCMnIlDCGp.
password_verify: bool(true)
array_column: Array
(
[key1] => hoge
[key2] => fuga
[key3] => piyo
)
ちゃんと動いてますね。
内部でphpバージョンを見たり function_exists してたりするので php 自体がバージョンアップされても少なくともエラーになったりはしないと思います。
あくまで関数を定義しているだけなので ::class
構文とか Generator(yield) とかが使えるわけではないですが、十分有用でしょう。