<?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
更多