On 12 June 2015 at 00:35, Rowan Collins <rowan.coll...@gmail.com> wrote:

> On 11/06/2015 21:22, Chris Wright wrote:
>
>> I'm inclined to agree that we should have consistency here, and that the
>> current behaviour in a function context is the correct one. A couple of
>> (IMO) good arguments for this:
>>
>> - The function behaviour gives a more explanatory and useful error message
>> - This is definitely a programming error, there is no valid reason to use
>> NULL as a variable name in this manner. It amounts to what many/most other
>> languages would consider to be a "null pointer exception" or equivalent,
>> and the more useful error message may help track down the error quicker
>> (one might look for a case where the empty string was assigned, instead of
>> looking for a case where it may be NULL).
>>
>
> Well, if you were to model it precisely on the function case, the
> *consistent* behaviour would be to error on any non-string value (e.g. $v =
> 42; $$v;) but not a string which is an illegal variable name ($v = '42';
> $v(); just complains that function 42 doesn't exist, not that it never
> could).
>
> A more useful approach would perhaps be to look at what should be a valid
> function name, and what should be a valid variable name, and throw an error
> if dynamic access is used to by-pass either restriction.
>

+1

If anything is to be done, then this should be it - properly abstract the
underlying structures so that the lexical/conventional limitations on
symbol naming are also imposed by mechanisms that let userland directly
manipulate the names of symbols (define(), class_alias() etc).


>
> For instance, this doesn't currently complain about the fact that @ is
> clearly nonsensical as either a function or a variable:
>
> $foo = '@';
> var_dump($$foo);
> $foo();
>
> And nor does the empty string, which seems no less obvious a bug than a
> NULL:
>
> $foo = '';
> var_dump($$foo);
> $foo();
>
>
>
> --
> Rowan Collins
> [IMSoP]
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to