include return

Духовность™

Продвинутый новичок
include return

Меня интересует практика использования синтаксиса PHP, при которой подгружаемый с помощью include файл может возвращать значения с помощью return. Таким образом я планирую подключать конфиги, которые хранятся в PHP-формате, а не в XML, txt или ini.

Меня интересуют подводные камни такого подхода. Кто может сталкивался с подобным?
 

Духовность™

Продвинутый новичок
Маленькие файлы-конфиги:

PHP:
<?php
return array
(
    'module_key' => 'news',
    'module_name' => 'Новости',
    // ......
)
?>
 

Adelf

Administrator
Команда форума
PHP:
<?php
register_config('config_name', array
(
    'module_key' => 'news',
    'module_name' => 'Новости',
    // ......
)
?>
?
 

Духовность™

Продвинутый новичок
Это че?

В системе существуют модули. У модулей есть языковые файлы, конфиги. Обычно они представляются в формате ini, xml, txt и др. Я храню конфиги в PHP-массивах. А подключаю с помощью include, но не в глобальное пространство, а в переменную:

$cfg = (array) include('config.php');

Вот в чем конкретно этого метода могут быть недостатки?
 

zerkms

TDD infected
Команда форума
мы в новой версии как раз так (return) всяческие конфиги и делаем. удобно.
 

fixxxer

К.О.
Партнер клуба
Недостаток один - можно наткнуться на некорректную работу акселераторов.

Я наталкивался на проблему с (кажется) xcache - там для закешированного файла возвращалось всегда 1. Хотя, наверное, давно пофиксили.
 

zerkms

TDD infected
Команда форума
точно так же, кстати, хочу ещё и кеширование сделать - только могут возникнуть траблы, если в акселераторе выключена проверка времени модификации.
 

whirlwind

TDD infected, paranoid
Встречал такие фитчи в некоторых движках. Очень неудобно расширять какие нибудь языковые файлы или конфиги с картами маршрутизации.
 

zerkms

TDD infected
Команда форума
whirlwind
чем неудобно?

чем кардинально отличается

$foobar = 'asd';
+
include 'file.php'; echo $foobar;

и

return 'asd';
+
echo include 'file.php'
?
 

fixxxer

К.О.
Партнер клуба
да легко расширяется, чо. в самом примитивном виде даже
Код:
03:49 fixxxer /tmp/1$ grep ^ *
1.php:<?
1.php:
1.php:$cfg = array();
1.php:$config_files = array('config1', 'config2');
1.php:while ($config_file = array_pop($config_files)) {
1.php:    $cfg += include $config_file . '.php';
1.php:}
1.php:
1.php: print_r($cfg);
config1.php:<? return array('a' => 1, 'b' => 1);
config2.php:<? return array('b' => 2, 'c' => 2);
ну рекурсивный мердж еще может понадобитьтся
 

whirlwind

TDD infected, paranoid
Ну смотри. Допустим у тебя есть 1 рабочий языковой файл в репозитории. Вася пишет модуль со своими языковыми константами. И Петя пишет свой модуль со своими языковыми константами. Петя и Вася вольные каменьщики и коммитить не могут. А Сережа хочет поставить оба модуля.

-~{}~ 02.09.09 03:47:

ЗЫ. просто так бывает, когда вы берете какойнить продукт и дорабатываете его. И при этом клиент хочет его патчить.
 

zerkms

TDD infected
Команда форума
как это связано со способом возврата данных? return усложнил что ли этот процесс по сравнению с обычным массивом?
 

whirlwind

TDD infected, paranoid
Если у тебя в конфиге типа

$lang['MY.CONST'] = 'foobar';

то ничто не мешает тебе объединить его с другим таким же конфигом. Но как объединить без изменений исходных файлов если return array()?
 

whirlwind

TDD infected, paranoid
Ну какой merge если ты редактируешь _сторонний_ продукт? Охота копаться лишний раз? Просто говорю как было: движок livestreet. Что бы добавить контроллер, нужно роут к нему прописать в config/config.route.php, потому что там return для карты, а копаться в движке нуегонах. С языковым файлом такая же ботва.
 

tf

крылья рулят
пишу return 404 всегда, от модуля к шаблонизатору:D
 
Сверху