PHP включает / требует внутри функции - PullRequest
7 голосов
/ 19 июня 2011

Возможно ли иметь операторы return внутри включенного файла, который находится внутри функции в PHP?

Я собираюсь сделать это, так как у меня много функций в отдельных файлах, и у всех них есть большой кусок общего кода вверху.

As in
function sync() {
  include_once file.php;
  echo "Test";
}

file.php:

...
return "Something";

В настоящий момент кажется, что возвращаемое что-то прерывается из include_once, а не функции синхронизации, возможно ли возвращение включенного файла?

Извините за слегка странный вопрос, надеюсь, я понял его.

Спасибо

Ответы [ 5 ]

6 голосов
/ 19 июня 2011

Вы можете вернуть данные из включенного файла в вызывающий файл с помощью оператора return.

include.php

return array("code" => "007", "name => "James Bond");

file.php

$result = include_once "include.php";
var_dump("result);

Но вы не можете вызвать return $something; и использовать его в качестве оператора возврата в вызывающем скрипте. return работает только в пределах текущей области видимости.

EDIT:

Я хочу сделать это, так как у меня много функций в отдельных файлах и у всех них есть большой кусок общего код вверху.

В этом случае, почему бы вам не поместить этот «общий код» вместо этого в отдельные функции - это будет хорошо выполнять работу , так как одна из целей наличия функций - повторное использование вашего кода в разных местах без повторной записи .

2 голосов
/ 19 июня 2011

Я не думаю, что это так работает.Функция include не просто помещает код на место, но и оценивает его.Таким образом, возврат означает, что ваш вызов функции include вернет значение.

См. Также часть в руководстве об этом:

Обработка возвратов: можно выполнитьоператор return () внутри включенного файла, чтобы завершить обработку в этом файле и вернуться к вызывающему его скрипту.

оператор return возвращает включенный файл и не вставляет «return»оператор.

В руководстве есть пример (пример № 5), который показывает, что делает return:

Упрощенный пример:

return.php

<?php  
$var = 'PHP';
return $var;
?>

testreturns.php

<?php   
$foo = include 'return.php';
echo $foo; // prints 'PHP'
?>
2 голосов
/ 19 июня 2011

return не будет работать, но вы можете использовать выходной буфер, если вы пытаетесь отобразить некоторые вещи в вашем включаемом файле и вернуть его куда-то еще;

function sync() {
  ob_start();
  include "file.php";
  $output = ob_get_clean();
// now what ever you echoed in the file.php is inside the output variable
  return $output;
}
0 голосов
/ 01 марта 2014

Рок-н-ролл вот так:

index.php

function foo() {
   return (include 'bar.php');
}
print_r(foo());

bar.php

echo "I will call the police";
return array('WAWAWA', 'BABABA');

выход

I will call the police
Array
(
    [0] => WAWAWA
    [1] => BABABA
)

просто покажи мне, как

вот так:

return (include 'bar.php');

Хорошего дня!

0 голосов
/ 04 ноября 2011

Я думаю, вы ожидаете, что return будет вести себя скорее как исключение, чем как оператор return. Возьмите следующий код, например:

return.php:

return true;

?>

exception.php:

<?php

throw new exception();

?>

При выполнении следующего кода:

<?php

function testReturn() {
    echo 'Executing testReturn()...';
    include_once('return.php');
    echo 'testReturn() executed normally.';
}

function testException() {
    echo 'Executing testException()...';
    include_once('exception.php');
    echo 'testException() executed normally.';
}

testReturn();

echo "\n\n";

try {
    testException();
}
catch (exception $e) {}

?>

... в результате вы получите следующий вывод:

Выполнение testReturn () ... testReturn () выполняется нормально.

Выполнение testException () ...

Если вы используете метод исключения, обязательно поместите вызов функции в блок try...catch - наличие исключений, распространяющихся повсюду, плохо для бизнеса.

...