Чтение Мануалов - Об Одном Секрете Можно Сказать

Для тех, кто приходит в мир 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 #Чулан

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.