#45319 [Com]: Array's don't convert as per documentation
ID: 45319
Comment by: smlerman at gmail dot com
Reported By: peillert at xs4all dot nl
Status: Open
Bug Type: Variables related
Operating System: Linux
PHP Version: 5.2.6
New Comment:
I'm not sure, but this may be related to a bug I filed a while ago:
http://bugs.php.net/bug.php?id=40692
Previous Comments:
------------------------------------------------------------------------
[2008-06-20 01:59:22] peillert at xs4all dot nl
Description:
------------
Array's don't convert as the documentation says and emit's an E_WARNING
upon conversion.
the documentation says that when converting an scalar value to an array
the result will be an array with 1 element, the original scalar value.
however the scalar value is never converted and an E_WARNING is emitted
instead. see code below.
a quote from the documentation:
"For any of the types: integer, float, string, boolean and resource,
converting a value to an array results in an array with a single element
with index zero and the value of the scalar which was converted. In
other words, (array)$scalarValue is exactly the same as
array($scalarValue)."
more interesting is that also the '(array)$scalarValue' does not work
but if the scalar evaluates to NULL such as false or an empty string it
does work. as in the test code i including below only test 2 works as
expected. test 1 emits an E_WARNING and test 3 fails silently.
now either the documentation is out-of-date but i cannot imagine that
this is the intended behaviour. especially test 3 is troublesome as an
explicit cast of any kind should not fail silently.
Reproduce code:
---------------
<?php
error_reporting(E_ALL);
print("\n Test 1.\n");
$scalar = true;
var_dump($scalar);
$scalar[] = "A new element to the array";
var_dump($scalar);
print("\n Test 2. \n");
$scalar = false;
var_dump($scalar);
$scalar[] = "A new element to the array";
var_dump($scalar);
print("\n Test 3. \n");
$scalar = true;
var_dump($scalar);
(array)$scalar;
var_dump($scalar);
?>
Expected result:
----------------
//test 1.
bool(true);
array(1) {
[0] =>
bool(true);
[1] =>
string(26) "A new element to the array";
}
//for test 2.
bool(false);
array(1) {
[0] =>
string(26) "A new element to the array";
}
//for test3.
(bool)true;
array(1) {
[0] =>
bool(true);
}
Actual result:
--------------
Test 1.
bool(true)
Warning: Cannot use a scalar value as an array in array_bug.php on line
6
bool(true)
Test 2.
bool(false)
array(1) {
[0]=>
string(26) "A new element to the array"
}
Test 3.
bool(true)
bool(true)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=45319&edit=1
Thread (5 messages)