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] [EMAIL PROTECTED]

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

Reply via email to