Два варианта включения файла посредством include и return

Статус
В этой теме нельзя размещать новые ответы.

doran7

Новичок
Общеизвестно, что выражение include() включает и выполняет указанный файл.
Вариант 1. Простое включение файла inp.php.

Условия включения

1. Включающий итоговый файл
res.php содержит простой код включения

include 'test.php';

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

При таком варианте в файл
res.php включается (и выполняется там) весь код скрипта файла inp.php. Все переменные файла inp.php доступны в файле res.php после строки включения. То есть, при таком включении в res.php включается весь файл inp.php целиком.

Вариант 2. Включение файла inp.php в переменную.

1. Включающий итоговый файл
res.php включает файл inp.php в переменную.

$foo = include 'inp.php';

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

return $output;

Предположение заключается в том, что при варианте 2 во включающий файл
res,php включается только переменная $output, а не весь скрипт файла inp.php. Это может быть полезным в определенных случаях.

Вопрос к корифеям. Проясните, люди добрые, насколько данное предположение верно. Сомнения есть...
 

doran7

Новичок
Дык, прояснил... Просто хотел умных людей послушать. Делаю в подключающем файле
echo "<pre>";
print_r(array_keys(get_defined_vars()));
echo "</pre>";
при использовании варианта 2 и вижу все ненужные промежуточные переменные подключаемого скрипта. Простая мысль удалить их через unset в конце подключаемого файла что-то не особо радует, но это и не цель данной темы.

Цель - понять разницу между вариантами 1 и 2 и, может быть, определить какие-то преимущества, которые дает вариант 2.

PS. Чистое имхо. Раньше, без визивига, постить и редактировать посты с bb-кодами на форуме было гораздо проще и легче.
 

doran7

Новичок
Ну, если ты её не видишь - то, может, её и нет, а ты просто забиваешь себе голову ерундой?
Первое. Похоже на то. Тогда в чем смысл применения варианта 2? Я такие конструкции нередко встречаю во всяких скриптах довольно серьезных приложений.

Второе. Собственно, мысль была как подключить файл таким способом, чтобы в подключающем файле получить только итоговую переменную $output работы скрипта подключаемого файла. Без остальных промежуточных массивов и переменных подключаемого файла.

Пока второе пробовал делать с помощью unset всех массивов и переменных, кроме $output, в конце подключаемого файла. Неужели нет никакого другого способа?
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
Первое. В чем смысл пить кока-колу - ведь есть же пепси? Оцени, какую я тебе открыл богатую жилу проблем, над которыми ты можешь поломать голову! В чем смысл идти пешком, если можно доехать на велосипеде? Зачем использовать цикл, когда есть встроенная функция перебора массива?

Второе. какую-то ты очень странную решаешь задачу, но рискну предположить, что ты никогда не слышал о функциях.
 

С.

Продвинутый новичок
doran7, вариант 1 и 2 ничем не отличаются. Текст, который ты процитировал, писал идиот. Забудь его поскорее.
 

doran7

Новичок
Первое. В чем смысл пить кока-колу - ведь есть же пепси? Оцени, какую я тебе открыл богатую жилу проблем, над которыми ты можешь поломать голову! В чем смысл идти пешком, если можно доехать на велосипеде? Зачем использовать цикл, когда есть встроенная функция перебора массива?
... :) Хотелось бы чуток конкретнее...

Второе. какую-то ты очень странную решаешь задачу, но рискну предположить, что ты никогда не слышал о функциях.
Понятно, что функция вернет только то, что прописано в return. Но вопрос не в этом, а в том, для чего пишут return $output в конце включаемого файла без функций, если это ничего не дает.
 

doran7

Новичок
doran7, вариант 1 и 2 ничем не отличаются. Текст, который ты процитировал, писал идиот. Забудь его поскорее.
Значит, вариант 2 используют одни идиоты? Но он довольно часто встречается в скриптах, странно.
Вариант 1 гораздо проще, почему не использовать только его?
 

doran7

Новичок
какая восхитительная наивность.
...:)
Учусь у php.net. Там тоже есть наивные...:)
Например
Пример #5 Выражения include и return
http://php.net/manual/ru/function.include.php

И в англоязычном поиске по критерию
php - require/include into variable
народ почему-то обсуждает работу варианта 2.
 

С.

Продвинутый новичок
Нет никаких 1и 2 вариантов. Процессы, происходящие в обоих этих случаях, абсолютно одинаковые.Более того, если не используется return, в подключаемом файле, там подставляется неявный return 1;
 

doran7

Новичок
Нет никаких 1и 2 вариантов. Процессы, происходящие в обоих этих случаях, абсолютно одинаковые.Более того, если не используется return, в подключаемом файле, там подставляется неявный return 1;
Они не могут быть абсолютно одинаковыми. Потому что если во включаемом файле не поставить строку с return итоговой переменной в явном виде
return $output;
то включение в переменную во включающем файле
$foo = include 'inp.php';
просто не сработает и выдаст ошибку.
Никакой неявный return 1; в данном случае не работает.
Рекомендации по поводу необходимости return $output; в подключаемом файле и на php.net и на разных англоязычных ресурсах при использовании варианта 2 твердые и недвусмысленные. На русскоязычных сайтах я этого не нашел, хотя, может, где-то что-то и есть.

require/include into variable
http://stackoverflow.com/questions/5948395/require-include-into-variable

Лучший ответ (16) по рейтингу
If your included file returned a variable...
include.php
<?php
return 'abc';

...then you can assign it to a variable like so...
$abc = include 'include.php';

Иначе, без явного return 'abc'; , включение файла в переменную через include не работает.
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
если во включаемом файле не поставить строку с return итоговой переменной в явном виде
return $output;
то включение в переменную во включающем файле
$foo = include 'inp.php';
просто не сработает и выдаст ошибку.
Никакой неявный return 1; в данном случае не работает.
ЩИТО?
Ты уже совсем зарапортовался.
Это, кстати, известная проблема. Называется синдром теоретика.
Ты так усиленно ищешь черную кошку в темной комнате, что идея включить свет и посмотреть тебе даже не приходит в голову.
На англоязычных ресурсах можешь читать любой бред, но ПИСАТЬ сюда бред НЕ НАДО.
 

doran7

Новичок
Вообще говоря, return итоговой переменной в файле подключаемом через include по общей логике PHP должен бы работать по некоторой аналогии с return в функции. Т.е. если есть return итоговой переменной в подключаемом файле, то в подключаемом файле должна быть доступна только эта переменная, а остальные переменные подключаемого файла удалены. Если это не так сейчас, то есть смысл подумать о доработке интерпретатора PHP в новых версиях PHP, чтобы он работал именно так. Это было бы весьма полезно.
 

Фанат

oncle terrible
Команда форума
Иначе, без явного return 'abc'; , включение файла в переменную через include не работает.
У тебя всё уже, чердак перегрелся.
Пойди погуляй, водички попей, поспи.
Потом придешь и первым делом опробуй отличить строку 'abc' от ФАЙЛА.
Если не сработает - найди хорошую кирпичную стену, и бейся об нее головой, пока не поймешь разницу.
 

Фанат

oncle terrible
Команда форума
Вообще говоря, return итоговой переменной в файле подключаемом через include по общей логике PHP должен бы работать по некоторой аналогии с return в функции. Т.е. если есть return итоговой переменной в подключаемом файле, то в подключаемом файле должна быть доступна только эта переменная, а остальные переменные подключаемого файла удалены. Если это не так сейчас, то есть смысл подумать о доработке интерпретатора PHP в новых версиях PHP, чтобы он работал именно так. Это было бы весьма полезно.
Жаль чувака. Похоже, действительно с катушек съехал.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху