Re: #46251 [Opn->WFx]: Array type documentation, error in example
| From: | Lars Torben Wilson | Date: | Wed, 05 Nov 2008 00:59:25 +0000 |
| Subject: | Re: #46251 [Opn->WFx]: Array type documentation, error in example | ||
| References: | 1 2 3 4 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969379630@lists.php.net to get a copy of this message | ||
2008/11/4 Hannes Magnusson <hannes.magnusson@gmail.com>:
> On Mon, Nov 3, 2008 at 09:44, Lars Torben Wilson <larstorben@gmail.com> wrote:
>> 2008/11/2 <danbrown@php.net>:
>>> ID: 46251
>>> Updated by: danbrown@php.net
>>> Reported By: php at pengi dot se
>>> -Status: Open
>>> +Status: Wont fix
>>> Bug Type: Documentation problem
>>> PHP Version: Irrelevant
>>>
>>>
>>> Previous Comments:
>>> ------------------------------------------------------------------------
>>>
>>> [2008-10-08 10:55:36] php at pengi dot se
>>>
>>> This also applies to the next section of the example.
>>>
>>> $b = array();
>>>
>>> ------------------------------------------------------------------------
>>>
>>> [2008-10-07 23:45:51] php at pengi dot se
>>>
>>> Description:
>>> ------------
>>> First example under section Examples in documentation for Array type
>>> says, that creating an array with array(initial value) is the same as
>>> writing:
>>>
>>> $a[key] = value;
>>> $a[key] = value;
>>> $a[key] = value;
>>>
>>> but missing initialization of the variable.
>>>
>>> This may also be a security issue for people using this way of
>>> initialization and also are using register_globals.
>>>
>>> What should be added to the example is:
>>> $a = array();
>>>
>>> URL to related documentation page:
>>> http://php.net/manual/en/language.types.array.php
>>>
>>> Reproduce code:
>>> ---------------
>>> // this
>>> $a = array( 'color' => 'red',
>>> 'taste' => 'sweet',
>>> 'shape' => 'round',
>>> 'name' => 'apple',
>>> 4 // key will be 0
>>> );
>>>
>>> // is completely equivalent with
>>> $a['color'] = 'red';
>>> $a['taste'] = 'sweet';
>>> $a['shape'] = 'round';
>>> $a['name'] = 'apple';
>>> $a[] = 4; // key will be 0
>>
>> I disagree with the decision to mark this "Won't Be Fixed"; the
>> documentation is incorrect and the fix is simple.
>>
>>
>> Index: en/language/types/array.xml
>> ===================================================================
>> RCS file: /repository/phpdoc/en/language/types/array.xml,v
>> retrieving revision 1.4
>> diff -u -u -r1.4 array.xml
>> --- en/language/types/array.xml 21 Feb 2008 18:43:17 -0000 1.4
>> +++ en/language/types/array.xml 3 Nov 2008 08:41:33 -0000
>> @@ -597,26 +597,33 @@
>> <programlisting role="php">
>> <![CDATA[
>> <?php
>> -// this
>> +// This:
>> $a = array( 'color' => 'red',
>> 'taste' => 'sweet',
>> 'shape' => 'round',
>> 'name' => 'apple',
>> - 4 // key will be 0
>> + 4 // key will be 0
>> );
>>
>> -// is completely equivalent with
>> +$b = array('a', 'b', 'c');
>> +
>> +// . . .is completely equivalent with this:
>> +$a = array();
>> $a['color'] = 'red';
>> $a['taste'] = 'sweet';
>> $a['shape'] = 'round';
>> $a['name'] = 'apple';
>> $a[] = 4; // key will be 0
>>
>> +$b = array();
>> $b[] = 'a';
>> $b[] = 'b';
>> $b[] = 'c';
>> -// will result in the array array(0 => 'a' , 1 => 'b' , 2 =>
>> 'c'),
>> -// or simply array('a', 'b', 'c')
>> +
>> +// After the above code is executed, $a will be the array
>> +// array('color' => 'red', 'taste' =>
>> 'sweet', 'shape' => 'round',
>> +// 'name' => 'apple', 0 => 4), and $b will be the array
>> +// array(0 => 'a', 1 => 'b', 2 => 'c'), or simply
>> array('a', 'b', 'c').
>> ?>
>> ]]>
>> </programlisting>
>
>
> I think the "Wont fix" was due to the fact you can do $foo[] =
> "value"; without initializing $foo = array() without getting any
> notices or difference then initializing it beforehand.
>
> Although we shouldn't be advocating such coding we still should
> document it - adding (like the bug reporter correctly pointed out)
> register_global issues note..
>
> -Hannes
I agree--and I know my tone to Dan was a bit brusque (sorry about
that). I just feel that we can't call the two examples "completely
equivalent" when one starts with a fresh array and the other only
starts with a fresh array if the array hasn't been defined yet (I
guess you know that though).
I haven't committed my changes since I don't want to just go charging
around changing things when Dan seemed like he had a reason not to
change it--which he well may. I'll commit when I get home in a few
hours if I hear nothing before then.
Torben