🐥
今週の PHP 2024-03-16 〜 2024-03-22
PHP のメーリングリストから、気になった情報をピックアップします。
Internal
Supporting object types in BCMath - Externals
現状のBC Mathは手続き型の関数しかサポートしていないので、オブジェクト型もサポートしませんかというさきちさんの提案
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スペースを使い尽くすことが可能ということです。
同様のタイプの問題への対応として、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