PHP include_once внутри функции, чтобы иметь глобальный эффект - PullRequest
2 голосов
/ 10 мая 2011

У меня есть функция в php:

function importSomething(){
    include_once('something.php');
}

Как сделать так, чтобы include_once имел глобальный эффект? Что все импортированное будет включено в глобальную область?

Ответы [ 5 ]

6 голосов
/ 10 мая 2011

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

Я думаю, что обходной путь - вместо этого вернуть имя файла из вашей функции и вызвать его, передав его результат include_once() ...

function importSomething() {
    return 'something.php';
}

include_once(importSomething());

Это выглядит не так хорошо, и вы можете возвращать только по одному за раз (если вы не возвращаете массив имен файлов, просматриваете его и каждый раз вызываете include_once()), но определение области действия является проблемой для этой языковой конструкции .

5 голосов
/ 10 мая 2011

Вы можете вернуть все переменные в файле, например, так ...

function importSomething(){
   return include_once 'something.php';
}

Пока something.php выглядит ...

<?php

return array(
    'abc',
    'def'
);

Который вы можете присвоить глобальной переменной ...

$global = importSomething();

echo $global[0];

Если вы хотите по-настоящему сойти с ума, вы можете extract() всех этих элементов массива в области видимости (глобальный в вашем случае).

4 голосов
/ 10 мая 2011

Если вы хотите, чтобы обычные определения переменных телепортировались в глобальную область автоматически, вы также можете попробовать:

function importSomething(){
    include_once('something.php');
    $GLOBALS += get_defined_vars();
}

Однако, если это действительно один массив конфигурации, я бы также выбралболее явный и многократно используемый return метод.

2 голосов
/ 18 января 2013

Я знаю, что этот ответ действительно опоздал для этого пользователя, но это мое решение:

внутри вашей функции, просто объявите любой из переменных, которые нужно перезаписать, как global .

Пример:

Необходимо установить для $ GLOBALS ['text'] значение "да":

Содержимое index.php:

function setText()
{
    global $text;
    include("setup.php");
}

setText();
echo 'the value of $text is "'.$text.'"'; // output: the value of $text is "yes"

Содержимое файла setup.php:

$text = "yes";

Решение похоже на решение mario, однако только явно объявленные глобальные переменныеперезаписаны.

0 голосов
/ 10 мая 2011

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

http://uk.php.net/manual/en/function.include.php (последний абзац перед примером)

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