4

:Q:数组键中的冒号有什么特殊意义吗?

从手册:

数组可以由array()语言构造创建。它将任意数量的逗号分隔键 => 值对作为参数。

array(  key =>  value
     , ...
     )

当我调查异常对象的设置时,我创建了一个错误条件并将这一行放入 -

print_r($ex);

然后在生成的网页中查看源代码并产生如下输出 -

Exception Object

(

[message:protected] => DB connection error: SQLSTATE[28000] [1045] Access denied for user 'test'@'localhost' (using password: YES)

[string:Exception:private] => 

冒号:[message:protected]重要的还是键 => 值对的键字面意思message:protected

4

3 回答 3

5

$ex不是数组而是对象。这就是print_r打印它的方式,表明:protectedmessage字段被标记为protectedException类中。

冒号在数组中没有任何特殊含义。

于 2012-02-19T14:07:02.267 回答
3

$ex不是一个数组,它是一个对象对象是比数组更复杂的数据结构。您看到的是该对象状态的文本表示。

开发人员决定使用与数组类似的表示,他们使用冒号分隔来提供有关对象属性的更多信息。

冒号没有意义,您将无法使用例如访问字段$ex['message:protected'].

于 2012-02-19T14:06:58.977 回答
1

您所拥有的是print_r异常对象属性的表示形式。除非该类实现ArrayAccess并且该属性是公共的,否则这些不能使用数组表示法访问。

进一步说明,如果您有这样的数组...

$array = array(
    'my:key' => 'my:value'
);

...您可以像往常一样访问该值$array['my:key']

于 2012-02-19T14:09:18.350 回答