ID: 45319 Comment by: peillert at xs4all dot nl Reported By: peillert at xs4all dot nl Status: Open Bug Type: Variables related Operating System: Linux PHP Version: 5.2.6 New Comment:
It's not the same but it may be caused by the same bug. they seem to be related yet not identical. an E_WARNING or E_NOTICE should be emitted if any cast, implicit but certainly explicit fails. php may not be type-strict but in cases where implicit conversion makes no sense such as accessing an scalar as if it where an array should emit an E_NOTICE telling the developer about his/her illogical use of the variable. and i believe it does if the scalar gets converted right then it should emit an undefined offset error or something like that. i thought that was why E_NOTICE was introduced. to tell the developer that what he/she is trying to do is not a good coding practice. Previous Comments: ------------------------------------------------------------------------ [2008-06-20 13:23:18] smlerman at gmail dot com 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 ------------------------------------------------------------------------ [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
