|
Posted by Norman Peelman on 03/12/06 06:26
"Anonymous" <anonymous@nowhere.invalid> wrote in message
news:441326E4.66903A5B@nowhere.invalid...
> ColdShine wrote:
>
> > There's no clear example stating this, but:
> >
> > echo "$array[key]";
> >
> > Is EXACTLY the same as:
> >
> > echo "{$array['key']}";
>
> No, Jerry is right, they are not the same.
>
> $array[key] is an array with a constant called key as index,
> $array['key'] is an array with the string 'key' as index. You will see
> the difference as soon as you assign a value to the constant key. :-)
>
> When using $array[key] PHP will try to find the constant key, but
> intelligently will assume you actually meant 'key' when it figures out
> that the constant is undefined. Here is the error from the log:
>
> [Sat Mar 11 19:29:40 2006] [error] [client 127.0.0.1] PHP Notice: Use
> of undefined constant key - assumed 'key' in C:\\webroot\\test.php on
> line 4
>
> The PHP manual says on this topic:
>
>
> Note: Enabling E_NOTICE during development has some benefits. For
> debugging purposes: NOTICE messages will warn you about possible bugs in
> your code. For example, use of unassigned values is warned. It is
> extremely useful to find typos and to save time for debugging. NOTICE
> messages will warn you about bad style. For example, $arr[item] is
> better to be written as $arr['item'] since PHP tries to treat "item" as
> constant. If it is not a constant, PHP assumes it is a string index for
> the array.
>
>
>
> However, strangely enough this warning showed up in the log only the
> first time I accessed the page! No more warnings on any subsequent
> accesses to the page or any other page with that kind of error!
>
> I just checked the config, ignore_repeated_errors and
> ignore_repeated_source are set to off. I also confirmed these settings
> with phpinfo(). However, PHP reacts as if both are set to on! Did I just
> find a bug?
>
> That would explain why you get no warnings! You probably got your first
> and only warning a long time ago if you always program like that. ;-)
>
> P.S.: I use PHP 4.4.2 which is the latest released version 4 available.
> Can anyone confirm that erroneous logging behaviour of this PHP version?
Consider this small piece of code:
---
<?php
error_reporting(E_ALL);
define('one','I am the defined one');
$str['one'] = 'I am the one!';
echo "<br>$str[one]";
echo '<br>'.one;
echo "<br>{$str['one']}";
?>
---
....output is exactly this:
I am the one!
I am the defined one!
I am the one!
.... no conflicts at all, no NOTICES, ERRORS, etc. The thing to wrap your
head around is that in a wierd technical way the associative index is
considered quoted as long as the entire variable is within double-quotes to
begin with. I personally prefer this way to multiple concatinations...
Norm
Navigation:
[Reply to this message]
|