这是一个用函数返回值作为数组索引的例子。PHP 也可以用已知常量,你可能之前已经见过 E_*。 $error_descriptions[E_ERROR] = "A fatal error has occured"; $error_descriptions[E_WARNING] = "PHP issued a warning"; $error_descriptions[E_NOTICE] = "This is just an informal notice";
注意 E_ERROR 也是个合法的标识符,就和第一个例子中的 bar 一样。但是上一个例子实际上和如下写法是一样的: $error_descriptions[1] = "A fatal error has occured"; $error_descriptions[2] = "PHP issued a warning"; $error_descriptions[8] = "This is just an informal notice";
$daytype前的$要不要转义,现在没法测试,只能提出疑惑。
为什么 $foo[bar] 错了?
应该始终在数组的索引上加上引号。例如用 $foo['bar'] 而不是 $foo[bar]。但是为什么 $foo[bar] 错了呢?你可能在老的脚本中见过如下语法:
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
这样是错的,但可以起作用。那么为什么错了呢?原因是此代码中有一个未定义的常量(bar)而不是字符串('bar'-注意引号),而 PHP 可能会在以后定义此常量,不幸的是你的代码中有同样的名字。它可以起作用,因为未定义常量会被转换为同样名字的字符串。 和在语法一节中规定的一样,在方括号(“[”和“]”)之间必须有一个表达式。这意味着你可以这样写:
echo $arr[ foo(true) ];
这是一个用函数返回值作为数组索引的例子。PHP 也可以用已知常量,你可能之前已经见过 E_*。 $error_descriptions[E_ERROR] = "A fatal error has occured";
$error_descriptions[E_WARNING] = "PHP issued a warning";
$error_descriptions[E_NOTICE] = "This is just an informal notice";
注意 E_ERROR 也是个合法的标识符,就和第一个例子中的 bar 一样。但是上一个例子实际上和如下写法是一样的: $error_descriptions[1] = "A fatal error has occured";
$error_descriptions[2] = "PHP issued a warning";
$error_descriptions[8] = "This is just an informal notice";
因为 E_ERROR 等于 1,等等。 那么 $foo[bar] 怎么可能起作用的呢?它起作用是因为根据语法的预期,bar 被当成了一个常量表达式。然而,在这个例子中不存在名为 bar 的常量。PHP 就假定你指的是字面上的 bar,也就是字符串 "bar",但你忘记写引号了。 那么为什么这样做不好?
在未来的某一时刻,PHP 开发小组可能会想新增一个常量或者关键字,那你就有麻烦了。例如你已经不能这样用 empty 和 default 这两个词了,因为他们是保留字。 注: 当你把 error_reporting 设为 E_ALL 时,你将会看到无论何时使用了未定义的 index 时,PHP 都会产生通知(在你的脚本中加入一行 error_reporting(E_ALL);)。 注: 在双引号 string 中,另一种语法是合法的。细节见字符串中的变量解析。
http://www.hooday.com/ 学