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

时间:2011-08-19 03:27:34

标签: php serialization constants declaration

<?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测试。)

2 个答案:

答案 0 :(得分:4)

const只能采用标量或非表达式值。

define将采用表达式值,这就是为什么定义适用于您的情况。

答案 1 :(得分:2)

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

相关的SO question

Google php const define

了解更多