php5 全部都能运行.
唯一区别的是 第三个输出是red!
A banana is yellow.A banana is yellow.A banana is red.A banana is yellow.主要是考查数组索引.
如果没有定义define('banana','strawberry');常量, $fruits[banana]输出yellow, 但其实这种写法是不正确的.
因为除了数字索引之外, 字符串索引应该加引号$fruits['banana'].
手册上讲,如果字符串索引不加引号会出现不可预期的错误,呵呵.
唯一区别的是 第三个输出是red!
A banana is yellow.A banana is yellow.A banana is red.A banana is yellow.主要是考查数组索引.
如果没有定义define('banana','strawberry');常量, $fruits[banana]输出yellow, 但其实这种写法是不正确的.
因为除了数字索引之外, 字符串索引应该加引号$fruits['banana'].
手册上讲,如果字符串索引不加引号会出现不可预期的错误,呵呵.
$fruits[banana]应该输出 red,这应该是最期望的结果.至于出现不同的输出,与php的编译有关系,呵呵,得好好学学编译原理了.
应该始终在用字符串表示的数组索引上加上引号。例如用 $foo['bar'] 而不是 $foo[bar]。但是为什么 $foo[bar] 错了呢?可能在老的脚本中见过如下语法:<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>这样是错的,但可以正常运行。那么为什么错了呢?原因是此代码中有一个未定义的常量(bar)而不是字符串('bar'-注意引号),而 PHP 可能会在以后定义此常量,不幸的是你的代码中有同样的名字。它能运行,是因为 PHP 自动将裸字符串(没有引号的字符串且不对应于任何已知符号)转换成一个其值为该裸字符串的正常字符串。例如,如果没有常量定义为 bar,PHP 将把它替代为 'bar' 并使用之。
define('banana','strawberry');
echo '</br>banana: ' .banana . '</br>';
echo '</br>banana:'."banana". '</br>';
echo '</br>$banana:'.$banana. '</br>';
1PHP常量
常量不加引号,不加引号的PHP会认为它是常量.
手册上讲得很清楚,如果你使用未定义的常量,会产生一个E_NOTICE的错误,然后会将它当本身当做一个字符串来处理.
echo bar; 会输出bar
2 数组
以字符串为索引的数组,手册上要求必须加上引号.否则会有E_NOTICE错误.
但是当出现在一个字符串的内部的时候,常量是不会被寻找的,所以就没有E_NOTICE级的错误,所以语法上是正确的.
echo "A banana is $fruits[banana]." //output "yellow"; 语法上是正确的,但是通常我们不用这样的写法,因为这不常归的写法.
echo "A banana is " . $fruits['banana'] . ".";或者echo sprintf("A banana is %s.", $fruits['banana']);
3 {}号的作用
echo "A banana is {$fruits[banana]}."; 这种情况和 echo $fruits[banana];是一样的.因为{}决定了PHP会把banana当作常量来寻找.当然你可以理解为{}里的会被先执行.我觉得已经说的很清楚了,实在不明白,也没有办法了,自己找个中文手册看吧.