Как я могу сказать, назвали ли возврат () из включенного файла. Проблема, это включает () возвраты 'интервал 1', даже если возврат () не назвали. Вот пример...
included_file_1.php
<?php
return 1;
included_file_2.php
<?php
echo 'no return here, meep';
main.php
<?php
$ret = include('included_file_1.php');
// This file DID return a value, int 1, but include() returns this value even if return() wasn't called in the included file.
if ($ret === 1)
{
echo 'file did not return anything';
}
var_dump($ret);
$ret = include('included_file_2.php');
// The included file DID NOT return a value, but include() returns 'int 1'
if ($ret === 1)
{
echo 'file did not return anything';
}
var_dump($ret);
Править: Как временное решение, я ловлю вывод от, включают () (от эха/операторов печати). Если вывод был произведен, я игнорирую возвращаемое значение от, включают ().
Не симпатичный, но это обеспечивает функциональность, мне нужна в моем веб-приложении / платформа.
Хороший вопрос. Глядя на примеры в руководстве , я думаю, вы не можете.
Лучшая идея обходного пути, которая приходит на ум, - сделать так, чтобы все ваши включения в ваш проект возвращали не голые значения, а массив, содержащий возвращаемое значение ( return array (1);
).
Все остальное, что приходит на ум (по крайней мере, у меня), включает определение некоторых констант или переменных, чтобы указать, включены вы или нет. Ничего изящного.
Такое поведение является преднамеренным - оператор include
возвращает 1, если включение выполнено успешно (или значение return
] 'ed включенным файлом), так как выполнение сценария может продолжаться даже в случае сбоя include
, и программист может проверить что в этом случае.
Из руководства:
[возвращаемое значение] - 1, потому что включение было успешным. Обратите внимание на различие между приведенными выше примерами. Первый использует return () внутри включенного файла, а другой - нет. Если файл не может быть включен, возвращается FALSE и выдается E_WARNING .
В этом случае просто не используйте 1 в своем коде в качестве возвращаемого значения для файла, т.е. это возвращаемое значение фактически зарезервировано для использования оператором PHP include
.
$ret = include('...'); Всегда будет возвращаться 1, если файл существует.
Попробуйте создать переменную и проверить, установлена ли она.
include_file_1.php
<?php
$includeFile1 = true;
main.php
<?php
include('included_file_1.php');
if (isset($includeFile1) == true)
{
echo "It was included";
}
Возможно, вы могли бы использовать debug_backtrace(), но это не совсем идеальное решение. Оно медленное, и вам придется проделать много работы, чтобы получить желаемые результаты.
К сожалению, ситуация, которую вы описали, выходит за рамки обычного использования include
и return
. Я бы просто изменил вашу логику, чтобы работать с этим. Почему бы файлам, которые обычно не вызывают return
, в конце просто не вызвать return 2
? Таким образом, вы получите значение, которое все еще оценивается как true при обычном сравнении, но вы можете использовать его как различие между другими вызовами return 1
.
Если во включенном файле нечего возвращать, функция включения по умолчанию возвращает 1 . В противном случае он вернет все, что было отправлено включенным файлом. Операторы Echo и print не являются возвратом, это должен быть оператор return, обозначенный PHP. Все остальное обработаем нормально. Этот код в основном говорит: «Правильно ли был выполнен файл?» и он возвращает 1, «да, это было.»
PHP: include - Руководство - Взгляните на «Обработка возвратов» прямо под сообщениями с предупреждениями безопасности, а затем посмотрите на Пример 5 и текст прямо под ним. Это все прекрасно объясняет.