#28151 [Bgs]: give notice when storing to an undefined array
| From: | aaron dot hawley at uvm dot edu | Date: | Mon, 26 Apr 2004 19:32:31 +0000 |
| Subject: | #28151 [Bgs]: give notice when storing to an undefined array | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-58823@lists.php.net to get a copy of this message | ||
ID: 28151
User updated by: aaron dot hawley at uvm dot edu
Reported By: aaron dot hawley at uvm dot edu
Status: Bogus
Bug Type: Variables related
Operating System: Debian GNU/Linux
PHP Version: 4.3.4
New Comment:
-Status: Open
+Status: Bogus
> Expected behaviour
Funny, I actually expected this response to my bug. I think that's
called recursion. [smiley-face]
I entertained your request of me to double-check the documentation. I
could only find the following mentions in the documentation:
"If $arr doesn't exist yet, it will be created. So this is also an
alternative way to specify an array."
I couldn't find anything about "error reporting" for this situation (is
this a [small] documentation bug?). I'm not requesting the
automatic-array-creation behavior be changed, I'm requesting a
"Notice"--not even a "Warning" (see below)--be generated when E_NOTICE
is set.
Continuing in the documentation, there were numerous examples and
array-"Do's and Don't's" showing which array index expresions generate
E_NOTICE errors. But nothing was mentioned of storing to indexes of
previously undefined variables (I couldn't find documention on the
"undefined variable" notice, either).
For the above, I only bothered looking closely at the following section
of the manual:
http://www.php.net/manual/en/language.types.array.php
I'm sure I would have had more success had I made a more general,
thorough and thus convincing argument. But instead I'll just try to
show the inconsistency of this "Expected behavior" with the following
examples:
Example 2-1: Undefined array gives warning
<?php
error_reporting(E_ALL); // This actually isn't needed.
array_push($not_an_array_yet, 'b');
exit("done\n");
?>
The above will output:
Warning: array_push(): First argument should be an array in
example_2-1.php on line 3
done
Example 2-2: PHP syntax of undefined array without warning
<?php
error_reporting(E_ALL);
$not_an_array_yet[] = 'b';
exit("done\n");
?>
The above will output:
done
Shouldn't it have been more "expected" for these to have behaved the
same? They did not. And I'm actually just arguing for a "Notice"
message and not the "Warning" which array_push() gives. Because, as
you may know, array_push doesn't create an array while the PHP syntax
does.
So I submit these should have more comparable semantic definitions and
thus both give warnings regardless if the PHP programmer chooses to use
the more succinct PHP array syntax over using a function call. If there
is some larger semantic difference between these two, I'm not aware of
it. Interestingly, the documentation
suggests<http://www.php.net/array_push> using the
empty-bracket
notation.
Perhaps I should have categorized this as a "feature request"? Because
it is useful for PHP to make sure your array was previously defined and
not simply a mistyped variable.
Previous Comments:
------------------------------------------------------------------------
[2004-04-26 19:30:00] iliaa@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
Expected behaviour
------------------------------------------------------------------------
[2004-04-26 04:56:11] aaron dot hawley at uvm dot edu
don't let the concatenated endline character confuse you.
sorry about that.
------------------------------------------------------------------------
[2004-04-26 04:54:51] aaron dot hawley at uvm dot edu
Description:
------------
When the left-hand-side of an assignment expression is an array
location using square-brackets, PHP should check that the array
variable was previously defined, and give a notice if E_NOTICE is
flagged in error_reporting.
This would find mistyped variables, and help with those attempting to
write more stable and secure PHP code with E_ALL.
Reproduce code:
---------------
<?php
error_reporting(E_ALL);
$not_an_array_yet[1] = 'a' . "\n";
exit("done\n");
?>
Expected result:
----------------
Notice: Undefined variable: not_an_array_yet in my_file.php on line 3
done
Actual result:
--------------
done
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=28151&edit=1