11月末にPHPの新しいバージョンである7.2系がリリースされました。

PHP7.2ではPHP7.0でも処理(表示)速度が大幅に改善されたけど、更に改善されるということで、

昨今の表示速度重視の流れに対してありがたい機能向上ではありますが、

コードの書き方でいくつか厳しくなったものがあります。


SOY CMS、SOY Shopで大きく影響を与えたものが、

SOY CMSで頻繁に利用されているcreate_function関数を使用しているだけでWarningエラーにすることと、

SOY Shopで頻繁に利用されているget_class関数で第一引数にnullを渡すとWarningエラーになる

count関数でカウントできない(たとえばnull)を入れるとWarningエラーになるという仕様変更で、

環境によってはPHP7.1からPHP7.2にアップグレードするだけでSOY CMS / Shopが止まります。

PHP: create_function - Manual


というわけで、

上記の問題を改善するために、


$this->_func = create_function('$items',implode("\n", $function));

という箇所があれば、

$this->_func = function($items) use ($function) { return eval(implode("\n", $function)); };

create_function関数から無名関数への変更や

PHP: 無名関数 - Manual


if(get_class($obj) != "SOYShop_Page") return;

if(!is_object($obj) || get_class($obj) != "SOYShop_Page") return;

のように第一引数の変数の中にオブジェクトの値が入っているかを確認するという処理を追加してPHP7.2に対応しています。


どちらの変更もPHP5.3で使用可能なので、

2017年12月時点でサポート切れになっているバージョンでもあるので、

現在推奨されているバージョンであればどのバージョンでも使用可能な改修となっています。


PHP7.2に対応したバージョンのダウンロードは下記から行うことができます。

https://saitodev.co/soycms/


まだ全機能を確認しきれたわけではないので、

今回のパッケージを使用してエラーメッセージが表示されたのであれば、下記のフォームから連絡していただけると大変助かります。

お問い合わせ - SOY CMSを使ってみよう - saitodev.co


追記

SOY Inquiry、SOY Mailでもcreate_functionが使用されていたので、今回の記事のように無名関数の使用へと変更しています。


追記2

ファイルマネージャで利用しているelFinderでもcreate_function周りの修正があるため、elFinderのバージョンアップも行っています。

elFinder - Web File Manager - open source project under the 3-clause BSD license