PHP включает/требует внутри функции

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

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

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

файл.php:

...
return "Something";

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

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

Спасибо,


person Pez Cuckow    schedule 19.06.2011    source источник


Ответы (4)


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

include.php

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

файл.php

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

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

ИЗМЕНИТЬ:

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

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

person LazyOne    schedule 19.06.2011
comment
Я не думаю, что это то, о чем спрашивали. Кажется, вопрос в том, могу ли я поместить возврат во включенный файл, который будет действовать так, как если бы в моей функции был вызван «возврат». Но это не так. - person Nanne; 19.06.2011
comment
@Nanne: да .. редактировала свой ответ сразу после публикации - person LazyOne; 19.06.2011
comment
К сожалению, это работа для друга, чтобы весь его проект был в надоедливых отдельных файлах :-( - person Pez Cuckow; 19.06.2011
comment
@Pez Cuckow: ОК, тогда вы можете попробовать это (но это сработает только в том случае, если включенный файл ВСЕГДА будет использовать оператор return): return include_once "include.php";. Кроме того, посоветуйте своему другу провести рефакторинг кода для использования функций — гораздо лучшая логика и меньше хлопот. - person LazyOne; 19.06.2011
comment
имейте в виду, что include_once или require_once вернут true вместо массива, если к нему будут обращаться во второй раз. Это может быть плохо, например, при загрузке файлов конфигурации с этой стратегией. вместо этого используйте include или require, если вы не уверены, что он может срабатывать только один раз. - person codercake; 27.03.2014

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

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;
}
person Ibu    schedule 19.06.2011
comment
может быть, кто-то может объяснить -1, это жизнеспособный метод решения проблемы - person Ibu; 20.06.2011
comment
Я сам не -1, но могу объяснить: возврат не сработает, в начале ответа просто неправильно. return из глобальной области включенного файла вернет значение, которое используется в качестве возвращаемого значения из самого оператора включения. - person FrancescoMM; 25.09.2016

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

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

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

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

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

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

return.php

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

testreturns.php

<?php   
$foo = include 'return.php';
echo $foo; // prints 'PHP'
?>
person Nanne    schedule 19.06.2011

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

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');

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

person Community    schedule 01.03.2014