Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Не видны переменные, передаваемые через функцию
Форумы портала PHP.SU » » Вопросы новичков » Не видны переменные, передаваемые через функцию

Страниц (1): [1]
 

1. dima2308 - 03 Января, 2019 - 18:21:11 - перейти к сообщению
Добрый день.
Имеется функция, подключающая файлы и принимающая данные.
PHP:
скопировать код в буфер обмена
  1. functions.php
  2. <?PHP
  3.     function renderTemplate($template_path, $template_data)
  4.     {
  5.         ob_start();
  6.         if (file_exists($template_path)) {
  7.             require_once "$template_path";
  8.         } else {
  9.             return "Файл $template_path не найден";
  10.         }
  11.         $content = ob_get_clean();
  12.         return $content;
  13.     }
  14. ?>

Подключаю этот файл в index.html, передаю функции путь к файлу и, для примера, одну переменную, которую хочу использовать в нем.
PHP:
скопировать код в буфер обмена
  1.  
  2. index.php
  3. <?PHP
  4.     require_once "functions.php";
  5.  
  6.     $var = "Привет";
  7.  
  8.     $page_content = renderTemplate('temp.php', [
  9.         'info' => $var]);
  10.     print($page_content);
  11. ?>

И теперь в самом файле temp.php пытаюсь обратиться к переменной $var.

Но ничего не выводится.
Это краткий пример для отображения сути проблемы.
Как всё же обратиться к переменной такой?
2. Мелкий - 03 Января, 2019 - 23:38:31 - перейти к сообщению
Почему вы пытаетесь обратиться к $var? Откуда эта переменная должна взяться в вашем коде внутри renderTemplate?
3. dima2308 - 04 Января, 2019 - 06:56:40 - перейти к сообщению
Я ведь с помощью renderTemplate подключаю внешний файл и массивом передаю переменные.
4. Мелкий - 04 Января, 2019 - 12:02:31 - перейти к сообщению
dima2308 пишет:
и массивом передаю переменные.

Это как?
В вызов функции вы передаёте массив. Массив вам и доступен.
Вероятно какой-нибудь extract хотели сделать.
Но даже при наличии extract это не отвечает на вопрос, откуда должна взяться $var. $info с копией $var получить можно, а вот $var - нет такого.
5. dima2308 - 04 Января, 2019 - 16:06:25 - перейти к сообщению
В источнике, откуда брал пример, именно напрямую обращались и все работало...
Я нашел способ такой:

Значение выводит.
Но проблема теперь несколько в другом.
Имеется такой массив, который я также передаю в функцию.
PHP:
скопировать код в буфер обмена
  1.  
  2. $info = [
  3.     0 => [
  4.         'name' => '2014 Rossignol District',
  5.         'categorie' => 'Доски и лыжи',
  6.         'price' => '10990',
  7.         'url' => 'img/lot-1.jpg'
  8.     ],
  9.     1 => [
  10.         'name' => 'DC Ply Mens 2016/2017',
  11.         'categorie' => 'Доски и лыжи',
  12.         'price' => '159999',
  13.         'url' => 'img/lot-2.jpg'
  14.     ],
  15.     2 => [
  16.         'name' => 'DC Ply Mens 2016/2017',
  17.         'categorie' => 'Крепления',
  18.         'price' => '159999',
  19.         'url' => 'img/lot-3.jpg'
  20.     ],
  21.     3 => [
  22.         'name' => 'Ботинки для сноуборда',
  23.         'categorie' => 'Ботинки',
  24.         'price' => '40000',
  25.         'url' => 'img/lot-4.jpg'
  26.     ]
  27.  

В основном файле обрабатываю его таким способом:
PHP:
скопировать код в буфер обмена
  1.  
  2. for ($i = 0; $i < count($info); $i++) {
  3.     echo $info[$i]['name'].'<br>';
  4. }
  5.  

Как получить доступ к элементам массива, используя его копию?

 

Powered by ExBB FM 1.0 RC1