Переменные внутри функции, которые будут использоваться во включениях в PHP - PullRequest
1 голос
/ 02 декабря 2009

У меня есть функция, которая включает другой файл, например,

// some function
function SomeFunction()
{
   $someData = 'SomeData';
   include_once('some_file.php');
}

// some_file.php
<?php echo $someData; ?>

Как заставить это работать, когда включаемый файл может использовать переменные из вызывающей функции? Я буду использовать некоторую буферизацию вывода.

Ответы [ 5 ]

2 голосов
/ 02 декабря 2009

Пока $someData определено в SomeFunction(), some_file.php будет иметь доступ к $someData.

Если вам нужен доступ к переменным вне SomeFunction(), передайте их в качестве аргументов SomeFunction().

0 голосов
/ 02 декабря 2009

Вам не нужно ничего делать. Использование include() (и его родных элементов) аналогично вставке кода из включенного файла в включающий файл в том месте, где вызывается include ().

Простой пример

test.php

<?php

$foo = 'bar';

function test()
{
  $bar = 'baz';
  include 'test2.php';
}

test();

test2.php

<code><?php
echo '<pre>', print_r( get_defined_vars(), 1 ), '
';

Опять же, это аналог комбинированного

<code><?php

$foo = 'bar';

function test()
{
  $bar = 'baz';
  echo '<pre>', print_r( get_defined_vars(), 1 ), '
'; } тестовое задание();
0 голосов
/ 02 декабря 2009

Похоже, неорганизованно включать файлы в функции ... как насчет ...

function SomeFunction()
{
   $someData = 'SomeData';
   return $someData;
}

$data = SomeFunction();
<?php include('file.php') ?> // file.php can now use $data
0 голосов
/ 02 декабря 2009

Лучше всего вообще не использовать глобальные переменные, а передавать переменную в качестве параметра:

function SomeFunction()
{
   $someData = 'SomeData';
   include_once('some_file.php');
   some_foo($someData);
}

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

0 голосов
/ 02 декабря 2009

Это уже доступно:)

См. include ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...