«Функция» include
Один из читателей в комментариях к статье про ошибочное толкование пхпешной конструкции «print» как функции, поделился более интересным случаем — таким же заблуждением относительно include.
Речь идёт об использовании include в выражениях, например:
$x = include("value.php") + 1;Хотя я ни разу не сталкивался с этой проблемой (зато видел проблемные ситуации с print), пример, готов признать, более жизненный — такое использование имеет смысл и наверняка встречается нередко.
Тут используется
Пример же иллюстрирует ровно ту же проблему, что и в случае с print: если программист не знает в чём различие конструкции и функции, он посчитает, что тут к возращаемому значению добавится единица.
На самом деле, скобки не являются часть конструкции include (она в скобках не нуждается), для неё скобки — просто часть единого аргумента «(„value.php“) + 1» и на вход include поступит значение «1», а это вряд ли то, чего программист добивался в этом примере.
В документации к ПХП написано как следует поступать в этом случае:
// неправильно, будет трактоваться как include(('vars.php') == 'OK'), т.е. include('')
if (include('vars.php') == 'OK') {
echo 'OK';
}
// а вот так — правильно
if ((include 'vars.php') == 'OK') {
echo 'OK';
}
Комментарии 8
Очень удобная штука, я её активно использовал в своих поделиях для подключения плагинов в песочнице. Воткак-то так:
//host.php
function sandbox($args…) {
//necessary magic to prepare $vars from $args
$result = include «plugins/sandboxed.php»;
//magic to sanitize $result
return $result;
}
// plugins/sandboxed.php
//code
return $result;
Странно, что про return from include почти никто не знает.
1. Не отобразится в браузере, даже если вдруг
2. Не занимает глобальную область видимости ненужными переменными.
Я сегодня впервые наткнулся на
а пишу на PHP уже много лет.
С массивами в ПХП вообще печаль. А всё
if (count($list)==0)
{
return ;
}