|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2010-06-11 01:52 UTC] zabruska at tugamail dot pt
Description:
------------
Calling msgfmt_create(...) or new MessageFormatter(...) with patterns having nested tags will return null.
Apparently the same happens with empty patterns, but returning NULL from an object constructor is a SERIOUS bug.
Test script:
---------------
$f1 = new MessageFormatter('en_US', '{what is wrong {0} with this pattern ???}');
echo 'f1 is ', gettype($f1), PHP_EOL;
$f2 = MessageFormatter::create('en_US', '{what is wrong {0} with this pattern ???}');
echo 'f2 is ', gettype($f2), PHP_EOL;
$f3 = msgfmt_create('en_US', '{what is wrong {0} with this pattern ???}');
echo 'f3 is ', gettype($f3), PHP_EOL;
Expected result:
----------------
f1 is object
f2 is object
f3 is object
Actual result:
--------------
f1 is NULL
f2 is NULL
f3 is NULL
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Dec 02 04:00:01 2025 UTC |
Use quotes to quote { inside the format string, since { is a special char for message formats. Like this: $f1 = new MessageFormatter('en_US', '\'{\'what is wrong {0} with this pattern ???\'}\'');I can understand if msgfmt_create(...) or MessageFormatter::create(...) return NULL on invalid patterns, but attempting to create any object using "new" should throw an exception. Imagine this: class MyMessageFormatter { function __construct($pattern) { if($this->badPattern($pattern)) { unset($this); return null; } } // ... } The above code makes no sense at all!!! PHP itself will compile the code, but will still give me an object. I insist that returning NULL from a constructor is a BUG, sorry...