2012-02-19 2 views
0

Способность иметь закрытие довольно новое, так что я не уверен, что если есть «стандартный путь», чтобы сделать это, но пока ...включая код в конфигурации PHP файл

Есть хороший способ включить функцию в файл конфигурации PHP? Прямо сейчас, проект, над которым я работаю, использует JSON для файлов конфигурации, но я не вижу возможности включить в него функции PHP.

Я хотел бы быть в состоянии сделать что-то вроде этого (с помощью JSON синтаксиса)


конф файл:

{ 
    myFunc: function($arg) { 
     return $arg . ' is an argument'; 
    } 
} 

Применение:

json_with_func_literal_decode(...); 

Он не должен использовать синтаксис JSON, хотя это было бы b Очень приятно. Скорость - это не проблема, если это разумно. Я бы хотел избежать использования eval(), что является очевидным решением этой проблемы.

+0

Я боролся с этим выпуск и ** Закрытие IMHO ** - это то, что лучше всего оставить вне фактических файлов конфигурации. На самом деле, я думаю, что ваши директивы конфигурации должны содержать только примитивные строки/ints/float. Модно использовать новые языковые функции, такие как lambda, для выполнения простых задач, но такие вещи, как конфигурация вашего приложения, будут более переносимыми (и читаемыми), если вы будете придерживаться основ (например, имена классов строк). Когда вы используете функции, которые могут быть реализованы только с помощью файла конфигурации PHP, вы исключаете возможность хранить ваши директивы в YAML/XML/JSON и т. Д. – rdlowrey

ответ

3

Вы могли бы просто использовать PHP файл без накладных расходов разбора JSON/YAML для конфигурации следующим образом:

<?php 
return array(
    'foo' => 'bar', 
    'myFunc' => function() 
    { 
     // ... 
    } 
); 

и получить конфигурацию, как так:

$config = include 'config.php'; 
+0

Не могли бы вы объяснить, как именно это работает? Но в остальном это здорово. –

+1

«Возврат [...], если текущий файл сценария был включен() ed, тогда значение, возвращаемое return(), будет возвращено как значение вызова include()» - http://php.net/manual /en/function.return.php – Vitamin

Смежные вопросы