LoginSignup
3
3

More than 5 years have passed since last update.

php5.4 以下で php5.5 の関数を使う(polyfill)

Posted at

php5.4 以下で php5.5 の関数を使う(polyfill)

前置き

array_column , password_hash とかそういうのを php5.4 以下でも使えるようにする話。
※ polyfill っていうと js なイメージがあるのはなんでなんだぜ?

php5.4 自体のサポートは切れていますが、RHEL/CentOS 7 がサポートしているので、まだ使う機会は多いんじゃないかと思ってます。

お手製 polyfill をどこかにまとめて UP しようとしたら既に Symfony が 公開していたので紹介します。

symfony/polyfill

github
packagist

php5.5 に限らず、様々な polyfill をまとめ上げたパッケージです。
有用だと思いますが、今私が欲しいのは 5.5 の関数群だけなので割愛。

symfony/polyfill-php55

github
packagist

上記の 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) とかが使えるわけではないですが、十分有用でしょう。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3