Edit report at http://bugs.php.net/bug.php?id=32865&edit=1
ID: 32865
Comment by: chrisbloom7 at gmail dot com
Reported by: dan at yes dot lt
Summary: explode do not works with $limit = null
Status: Bogus
Type: Bug
Package: Strings related
Operating System: WinXP
PHP Version: 5.0.4
Block user comment: N
Private report: N
New Comment:
while null does evaluate to 0 when compared, most other functions treat
a NULL valued argument as though the argument did not exist, i.e. NULL
== DEFAULT. The behaviour of explode to treat NULL as 0 comes back to
bite us when we want to create a function that duplicates and extends
explode's functionality. Consider the following:
function explode_and_trim($separator, $string, $limit = null)
{
$a = explode($separator, $string, $limit);
foreach ($a as $k => $v) {
$a[$k] = trim($v);
}
return $a;
}
In that scenario, I cannot tell explode that there is NO limit unless I
add a ridiculously unnecessary IF block to decide if it should or should
not be called with the limit argument. NULL should be NULL, and
regardless of whether PHP is loose typed or not, one can quite
accurately test whether something is actually null (is_null($n)) or zero
($n === 0)
Previous Comments:
------------------------------------------------------------------------
[2005-04-28 13:08:21] [email protected]
No, it's how the language works.
------------------------------------------------------------------------
[2005-04-28 13:06:47] dan at yes dot lt
now I have to write..
if ($lim === null) {
$parts = explode(',', $str);
} else {
$parts = explode(',', $str, $lim);
}
..instead of..
$parts = explode(',', $str, $lim);
Isn't it some sort of crap ?..
------------------------------------------------------------------------
[2005-04-28 12:09:12] dan at yes dot lt
So what should I give to $limit to explode unlimited ???... As I know -
in PHP no parameter means some default value - what default value is
defined to default $limit ?..
------------------------------------------------------------------------
[2005-04-28 11:43:01] [email protected]
Yes, null == 0. (PHP is still loose typed language..)
------------------------------------------------------------------------
[2005-04-28 11:19:04] dan at yes dot lt
Description:
------------
explode() do not explodes string if $limit argument is null, but
explodes if no $limit argument given.
Reproduce code:
---------------
print_r(explode(',', 'a,b,c'));
print_r(explode(',', 'a,b,c', null));
Expected result:
----------------
Array
(
[0] => a
[1] => b
[2] => c
)
Array
(
[0] => a
[1] => b
[2] => c
)
Actual result:
--------------
Array
(
[0] => a
[1] => b
[2] => c
)
Array
(
[0] => a,b,c
)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=32865&edit=1