#28503 [Ver->WFx]: Operator $x[$y] behavior is incorrect

From: Date: Thu, 23 Jun 2005 22:14:51 +0000
Subject: #28503 [Ver->WFx]: Operator $x[$y] behavior is incorrect
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-80928@lists.php.net to get a copy of this message
 ID:               28503
 Updated by:       andi@php.net
 Reported By:      tomas dot matousek at matfyz dot cz
-Status:           Verified
+Status:           Wont fix
 Bug Type:         Scripting Engine problem
 Operating System: *
 PHP Version:      5CVS, 4CVS (2005-06-19)
 New Comment:

In general, I suggest you initialize arrays with $arr = array();.
This behavior is for backwards compatibility which comes from the early
PHP 3 and PHP 4 days (before we had NULL and false). The old
empty_string mapped to this and we had to keep behavior so as not to
break large amounts of applications.
However, you shouldn't be bumping into it especially as you are now
aware that you should initialize your array()'s explicitly (or use
undefined variables).


Previous Comments:
------------------------------------------------------------------------

[2004-05-24 19:34:43] pollita@php.net

I agree it's inconsistent, as it happens though it's being discussed
already because of a related (but not identical) bug report:
http://bugs.php.net/28476

------------------------------------------------------------------------

[2004-05-24 11:21:26] tomas dot matousek at matfyz dot cz

Sorry te "Actual result" should be reversed:

Warning:  Cannot use a scalar value as an array ...
array(1) {
  [10]=>
  int(1)
}

------------------------------------------------------------------------

[2004-05-24 11:18:46] tomas dot matousek at matfyz dot cz

Description:
------------
Why does operator [] create a new array when applied on boolean FALSE
and doesn't do so  when applied on integer 0? One of that is IMHO
wrong. Either this operator should create a new array on everything
that is empty() or it should fail on all scalar types and make a new
array only from empty string "" or NULL or uninitialized variable.


Reproduce code:
---------------
$a = 0;
$a[10] = 1;
var_dump($a);

$b = false;
$b[10] = 1;
var_dump($b);


Expected result:
----------------
Warning:  Cannot use a scalar value as an array ...
Warning:  Cannot use a scalar value as an array ...


Actual result:
--------------
array(1) {
  [10]=>
  int(1)
}

Warning:  Cannot use a scalar value as an array ...



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=28503&edit=1



Thread (5 messages)

« previous php.bugs (#80928) next »