Слишком высокая цена вхождения. Если позволите, у меня сегодня ещё вопрос возник. Схематически задача формулируется так. Есть Файл1, в котором всё собирается. Есть Файл2, в котором я присваиваю значение переменной $autor='ivanov'. И есть Файл3, содержимое которого через include встраивается в Файл1. Проблема в том, что в Файле3 есть формула, которая в качестве аргумента использует значение переменной $autor, которое, напомню, задаётся в Файле2. Насколько я понимаю, перед инклудом в Файл1, Файл3 полностью генерируется/компилируется, а потом полученное поставляется в запросивший Файл1. Но поскольку на момент компиляции в Файле3 переменная $autor не видна, то функция в Файле3 ничего не возвращает. Как побороть? Использовать str_replace не хотелось бы.
Там вхождение происходит за 8 часов если знать PHP и ООП. include просто выполняет код на том месте, где его вызвали из того файла что ему указали, по этому не нарушай логику если бы ты всё делал в одном файле, вот и всё. выложи сюда пример ситуации с этими тремя файлами.
Файл index.php, где всё собирается. PHP: include 'article.php'; if ($blog) { include('z/blog.php'); }; Файл article.php, где присваивается значение переменной. PHP: $blog = array('autor' -> 'ivanov', 'date' -> '12.07.2016'); Файл blog.php, где рисуется отметка об авторе статьи и дате публикации. PHP: <ul> <li>Автор: <? echo $blog['autor']; ?></li> <li>Дата: <? echo $blog['date']; ?></li> </ul> Проблема в том, что в index.php отметка выводится, то значения автор и дата пустые.
Я ошибся. Код из предыдущего сообщения выполняется. Я его придумал, когда сообщение писал. Не выполнялся у меня код, оформленный в Класс. Но то уже теорию подтянуть надо.
Вставлю свои две копейки по теме встала задача не дублировать html . Почисал репу и решил сделать статический метод для вывода html в цикле и встала два варианта либо как-то так: PHP: static function OutputForLoopHTML($path, $input) { $time_start = microtime(true); $html_block = file_get_contents($path); foreach($input As $item) { eval('?>' . $html_block . '<?php '); } $time_end = microtime(true); $time = $time_end - $time_start; $time .= ': Время исполнения file_get_Contents!<br />'; static::debag($time); } Или так PHP: static function OutputForLoopHTML_include($path, $input) { $time_start = microtime(true); foreach($input As $item) { include $path; } $time_end = microtime(true); $time = $time_end - $time_start; $time .= ': Время исполнения инклуда!<br />'; static::debag($time); } И вот результаты замера времени на 186 строк вывода каждого блока
Почему ? --- Добавлено --- Это шаблонизация внутри шаблонизатора внутри архитектуры framework Это просто заместо постоянного написания foreach. Скажем так чтобы html код не шёл монолитом я разбиваю его на некие модули. Для удобства разработки, создаю архитектуру в template У меня на сайте два блока вывод у них одинаковый а информация из базы разная. То есть html код одинаковый, а информация в массивах разная, но имена ключей в массиве тоже одинаковые. Потому-что данные берутся из одной и той же сущности, но с разными данными для разных блоков. Короче говоря это шаблонизация. И я наоборот создал функцию для того чтобы не дублировать html код. И за одно избавился от написания foreach в шаблоне. А по моему имя статического метода говорит само за себя OutputForLoopHTML
почему родным шаблонизатором не пользуешься? почему какими-нибудь классами и автолоадами не пользуешься?
Потому что родной шаблонизатор это php --- Добавлено --- @igordata я же слимом пользуюсь --- Добавлено --- А причём тут классы и автолоад... Это тут причём ? Походу ты просто не понимаешь что я и зачем сделал. У меня всё нормально отрабатывает слим изконтроллера данные рендерит в шаблон я в шаблоне пишу html и в нём вывожу данные! Так вот два одинаковых блока с одинаковым до абсолюта html ток массивы вывода разные и чтобы не дублировать html я создал функцию при чём тут классы и автолоад. Там и так всё это есть. --- Добавлено --- Вы моё последнее сообщение не связывайте с другими сообщениями в этой теме. Те сообщения я писал полтора года назад. Когда ещё много чего не знал. И они вообще смешные. Даже обсуждать не хочу.
Админам давно пора замутить услугу, типа пришли смс и мы удалим все твои сообщения старше одного года ))