Edit report at http://bugs.php.net/bug.php?id=52042&edit=1
ID: 52042
User updated by: zabruska at tugamail dot pt
Reported by: zabruska at tugamail dot pt
Summary: Error creating MessageFormatter object with nested
tags
Status: Bogus
Type: Bug
Package: *Languages/Translation
Operating System: Ubuntu 9.10
PHP Version: 5.3.2
Assigned To: stas
New Comment:
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...
Previous Comments:
------------------------------------------------------------------------
[2010-06-15 23:53:51] [email protected]
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php
------------------------------------------------------------------------
[2010-06-15 23:53:36] [email protected]
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 ???\'}\'');
------------------------------------------------------------------------
[2010-06-11 08:15:19] [email protected]
Constructors definitely should throw an Exception.
------------------------------------------------------------------------
[2010-06-11 01:56:48] zabruska at tugamail dot pt
Escaping the tags makes no difference either
------------------------------------------------------------------------
[2010-06-11 01:52:14] 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
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=52042&edit=1