У меня есть несколько файлов php для включения, и они должны действовать как функция в защищенной области. Закрытие предназначено для их загрузки (включения) и выполнения. Хотя я сталкиваюсь с каким-то странным влиянием на кодирование этих закрытий. Все файлы php заканчиваются оператором return.закрытие с включенным внутри
function myClosure() {
include 'file.php';
return $closure; // initialized in file.php
};
$func = myClosure();
echo $func('1'); // echoes '2'
echo $func('4'); // echoes '8'
где file.php что-то вроде
<?php
$closure = function($a) {
$b = $a + $a;
return $b;
};
?>
Это работает. Тем не менее, я хотел бы иметь функцию закрытия закрытия ($ b) '(без «возврата») в основном коде, а не во внешний файл. К сожалению, следующий не работает, как ожидалось:
function myClosure() {
$closure = function($a) {
include 'file.php';
};
return $closure;
};
$func = myClosure();
echo $func('1'); // echoes null
echo $func('4'); // echoes null
где file.php что-то вроде
<php
$b = $a + $a;
return $b;
?>
, изменяющий включает в include_once дает то же самое для первого примера, а не для второго Пример: второе эхо не запускается. Я подозреваю, что это поведение является либо ошибкой (php 5), либо из-за незаконного трюка с include. Может быть, «возврат в коде привязан к их контексту? Буду признателен за помощь, будь то урок по чистому кодированию, будь то правильный трюк.
Вы не возвращаетесь в закрытие. 'include 'file.php'' будет переводить, как вы сказали, в' ... return $ b', однако '$ clos = function ...' также имеет область действия, поэтому' return $ clos' будет фактически возвращаться null, так как это значение по умолчанию, которое дает PHP. Короче говоря, просто сделайте 'return include 'file.php'' внутри' myClosure'. – Andrew