質問: $calc_res) { // 演算子は最低でも1つは入れる=5桁以上 print $num . "\n"; } } } } } ``` 答えは正しく出たのですが、必要になる演算子が「*」のみというのが前提のかなり強引な方法です。 もっと良い方法があれば教えていただきたいです。 ちなみに、eval関数を使用するのは避けて逆ポーランド記法などを使って実装すべきかもしれませんが、ここではそれはまた別の話とさせてください。
回答: > > PHP5では上記で動いていたのですが、これをPHP7で実行すると以下のようなエラーが出ました。 > > > php 5 系でもまともに動いていません。 今回のエラーは ``` return 1*0*08 ``` が最初に引っかかってます。 0 を頭に付ける表記は 8進数を表します。 5 系では、8進数として正しくない表現は無視(?)されていましたが、 7 系では、8進数として正しくない表現はエラーとすることになりました。 計算としても、8進数で計算されています。 ``` echo 1 * 017; //15 ``` もともと正しく動いていなかったコードが、正しく(?)エラーを吐くようになっただけです。 マニュアルの該当箇所は以下です。 構文-整数 php.net Invalid octal literals 正常に動かすには、すでに検討しているように ・文字列から、頭に 0 のついた数字を 0 なしのものに置換 する必要があります。 正規表現でも使用すると適切に対応できると思います。