|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2008-06-20 13:23 UTC] smlerman at gmail dot com
[2008-06-21 02:54 UTC] peillert at xs4all dot nl
[2008-06-23 13:52 UTC] m dot sedziwoj at gmail dot com
[2016-08-12 12:06 UTC] cmb@php.net
-Status: Open
+Status: Not a bug
-Type: Feature/Change Request
+Type: Bug
-Package: Feature/Change Request
+Package: Scripting Engine problem
-Assigned To:
+Assigned To: cmb
[2016-08-12 12:06 UTC] cmb@php.net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Nov 05 13:00:01 2025 UTC |
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)