🐥

今週の PHP 2024-03-16 〜 2024-03-22

2024/03/24に公開

PHP のメーリングリストから、気になった情報をピックアップします。

Internal

Supporting object types in BCMath - Externals

現状のBC Mathは手続き型の関数しかサポートしていないので、オブジェクト型もサポートしませんかというさきちさんの提案

PHP: BC Math - Manual

PHPの拡張とか、便利サービス郡では、古くから手続き型の関数だけが提供されてたり、オブジェクト型との両サポートがあったりと、対応状況はマチマチです。

というか、演算子オーバーロードかっこいい!

$start = microtime(true);
$num = new BcNum('3.650000001', 10);
$num2 = new BcNum('4.2335185', 10);
for ($i = 0; $i < 1000000; $i++) {
$num3 = str_repeat('1', rand(1, 1));
$num4 = str_repeat('1', rand(1, 1));
$num = $num + $num3;
$num2 = $num2 - $num4;
$num = $num + $num2;
}
var_dump('BcNum and string: ' . microtime(true) - $start);

上の例は、BcNum クラスをサラッと足しているわけです。見た目がいい。

XSLTProcessor recursion limit - Externals

XSLTProcessorの再帰回数に制限を加えようという話です。制限がない場合にStackスペースを使い尽くすことが可能ということです。

提案内容のPRはこちら Implement request #71571: XSLT processor should provide option to change maxDepth by nielsdos · Pull Request #13731 · php/php-src

同様のタイプの問題への対応として、PCREにはpcre.recursion_limitという設定があります。

PHP: rfc:integer-rounding

与えられた整数を丸めて、可能な限り丸められた整数値を返すというRFCですが、投票が開始されました。

これは無理そうかなと思いましたが、現在は全員NOになっています。

Proposal: AS assertions - Externals

コード例を見るのが一番なのですが、 as キーワードを使って、assertionを楽にできるようにしようという提案です。Nullableも有り。

$x = $attributeReflection->newInstance() as MyAttribute;

既存の同等コードはこれです。確かに上より読みにくい。ただassertという単語が消えてしまうとアサーションしていることが明示的ではなくなりますね。

assert(($x = $attributeReflection->newInstance()) instanceof MyAttribute);

提案に対しては、たくさんのコメントが付いています。皆さん興味あるトピックということですね。
この構文の問題点など、たくさん指摘が上がっています。無事に現実的な提案になった場合は、Assertionが楽に書けるようになりそうですね。

Discussion