Почему сериализованные объекты нельзя хранить в константных константах? - PullRequest
0 голосов
/ 19 августа 2011
<?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 ]

4 голосов
/ 19 августа 2011

const может принимать только скалярные значения или значения без выражений.

define будет принимать значения выражений, и поэтому define работает в вашем случае.

2 голосов
/ 19 августа 2011

const - это действие во время компиляции.define - это действие во время выполнения.Во время выполнения доступно больше механизмов php, включая выделение массивов и выделение места.

Связанный SO вопрос

Google php const define

для более

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...