为什么序列化对象不能存储在const常量中


Why Can't Serialized Objects Be Stored in const Constants?

<?php
    const FOOBAR = "Foo"; // Works.
    const FOOBAR = array("Foo", "Bar"); // Doesn't work.  Makes sense.
    const FOOBAR = serialize(array("Foo", "Bar")); // Doesn't work.  Okay.  :'
    define("FOOBAR", serialize(array("Foo", "Bar"))); // Works!  The heck?
 ?>

PHP Parse error: syntax error, unexpected '(', expecting ',' or ';'

为什么常数可以被设置为序列化对象,当他们用define()声明,而不是用const关键字?我遗漏了什么?

(用5.3.5-1ubuntu7.2测试)

const只能接受标量值或非表达式值。

define将接受表达式的值,这就是为什么define在你的例子中起作用。

const是编译时操作。Define是一个运行时操作。在运行时可以使用更多的php机制,包括数组分配和空间分配。

一个相关的SO问题

Google php const define

更多