Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

headjapan
中規模~大規模の安定した基幹システム・大規模サイトの分析・要件定義・設計・開発を得意とする、総合的な開発会社です。
http://www.headjapan.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away