Для тех, кто приходит в мир PHP из C или других языков, зачастую является откровением увидеть некоторые особенности языка, которые описаны в документации, но, тем не менее, часто ускользают из виду.
Сегодня я хочу поговорить о нестандартном (с точки зрения большинства программистов) использовании оператора include в PHP. Оказывается, этот оператор, помимо своей основной работы — включения внешнего файла в вашу программу, может вести себя еще и как функция, то есть возвращать значение.
Чтобы получить «значение файла», достаточно использовать оператор return во включаемом файле, как в функции.
Тогда становятся возможными следующие конструкции: а.
php: $ret = 'aaa';
return $ret;
б.
php: $b = include('a.php');
echo $b; // Displays 'aaa'
Зачем это может понадобиться?
Из личного опыта я нашел два очень практичных и практичных варианта использования этой «накрутки».
1. Строительные блоки.
Многие CMS, связанные с Nuke, такие как XOOPS и RunCMS, а также новая версия Ronny CMS, используют модульно-блочную структуру.
Модуль реализует определенный функционал и отображает свое содержимое блоками, из которых формируется страница.
Обычно это делается следующим образом.
Каждый модуль имеет список блоков, а для блока указывается включаемый файл и функция, выводящая содержимое: $block[0]['file'] = 'block_file.php';
$block[0]['func'] = 'show_func';
Соответственно, где-то внутри CMS что-то вроде include($module .
$block[0]['file']);
echo $block[0]['func']();
Таким образом, мы имеем дополнительный уровень абстракции и, что самое страшное, возможность коллизии имен функций.
Рациональнее использовать возможность оператора include возвращать значение из включаемого файла: echo include($block[0]['file']);
, что упростит код и избавит от опасности совпадения имен функций.
Такой подход применим не только в блоках CMS, но и везде, где необходимо разделить программу на функциональные модули.
2. Использование в конфигах
Я просто проиллюстрирую кодом: конфиг.
php: $config['host'] = 'test.com';
$config['user'] = 'test';
$config['pwd'] = 'tESt';
return $config;
тест.php: $params = include('config.php');
Все примеры являются гипотетическими и служат только для иллюстративных целей.
P.S. Эта тема уже поднималась, например здесь: habrahabr.ru/blogs/php/39034 , но я подумал, что в повторении не будет ничего страшного.
П.
П.
С.
Во время интервью с программистами я использую вопросы о значении, возвращаемом функцией include, и о конструкциях типа $$a. Они, конечно, не имеют решающего значения, но позволяют понять, насколько глубоко человек знает используемый язык.
Теги: #php #Чулан
-
Гекссомонофосфатный Шунт
19 Oct, 24 -
Обзор 20-Летия Bittorrent. Время == Качество
19 Oct, 24