Назначение содержимого файла для объекта? - PullRequest
2 голосов
/ 04 октября 2011

В настоящее время у меня есть внешние файлы JSON, которые PHP использует для настройки проверок и фильтров запроса. Это позволяет легко назначать содержимое файла в качестве объекта переменной.

$object = json_decode(file_get_contents($filepath));

Мне интересно, может ли быть другой способ сделать это, не включающий разбор JSON? Я хотел бы по-прежнему иметь возможность назначать содержимое файла для переменной времени выполнения, но есть ли лучший / более быстрый способ сделать это?

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Звучит сложно ... Я бы предложил иметь коллекцию файлов классов php, которые включаются при вызове с использованием require_once();

Это зависит от того, что хранится в этих файлах.

В php есть еще один метод, называемый parse_ini_file(); [ docs ], но он подходит только для пар ключ-значение.

1 голос
/ 04 октября 2011

Edit3: Чтобы назначить что-то нестатическое переменной из файла, вы можете использовать оператор return внутри файла, а затем включить файл, чтобы назначить его переменной:

$var = include($file);

$file должен быть файлом с правильным синтаксисом PHP (см. include Документы и оператор return. Тогда вы готовы идти.

Включить поэтому очень похоже на eval на уровне языка, поэтому будьте осторожны.


Есть и другой способ, например, JSON - это сериализация: serialize Документы и unserialize Документы , а также в PHP.

$object = unserialize(file_get_contents($filepath));

file_put_contents($filepath, serialize($object));

Говорят, что это медленнее, чем с json_encode / json_decode (я не измерял это).

Преимущество этого в том, что улучшена поддержка конкретных экземпляров объектов PHP, он просто лучше интегрируется с языком (что неудивительно, поскольку это ядро ​​PHP).

Редактировать: Как прокомментировано, вы хотите вручную редактировать файлы. Сериализованные в PHP данные (по умолчанию) не очень удобны для чтения / редактирования, поэтому вы можете поискать сериализацию в XML: XML_Serializer Пакет PEAR . Другой XML Serializer доступен в Symfony2 и поддерживает также другие форматы (например, JSON).

Другой альтернативой является переключение сериализатора PHP на WDDX (поставляется с ядром PHP), который фактически является XML.

Edit2: Есть что-то похожее на JSON для PHP: eval и var_export. Но будьте осторожны, это несколько грязно (или лучше сказать зло), и конкретный класс тоже должен это поддерживать (при использовании объектов):

$var = array('prop' => 'some value');

ob_start();
var_export($var);
$buffer = ob_get_clean();

# $buffer now contains something that can be saved,
# to load it again:

$var = eval('return '.$buffer.';');

var_dump($var);

Песочница

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