Проблема с переменной PHP - PullRequest
1 голос
/ 04 июля 2011

В моем коде я использую общедоступную функцию класса load_snippet, когда мне нужно включить фрагменты HTML или PHP.(Я делаю это вместо прямого include_once, потому что структура каталогов варьируется в зависимости от определенных переменных).

У меня были некоторые проблемы с областями действия переменных, поэтому я сузил проблему до этого: скажем, яопределите переменную на моей странице:

$variable = 'Hello World!";

Затем мне нужно загрузить фрагмент:

$APP->load_snippet("slider");

Фрагмент отрисовывается идеальноза исключением того, что PHP выдает неопределенную ошибку переменной, если я пытаюсь сослаться на $variable в коде слайдера.Если я непосредственно include файл php, он работает, как ожидалось, поэтому я не понимаю, почему у меня возникла эта проблема, так как это функция load_snippet:

public function load_snippet($snippet){  
if(file_exists("app/".$this->APP_TYPE."/snippets/".$snippet.".php")){  
        include "app/".$this->APP_TYPE."/snippets/".$snippet.".php";  
    }  
    else{  
        include 'common/txt/404.txt';  
    }  
}

Любая помощь вамможет дать мне очень ценится.

Ответы [ 6 ]

1 голос
/ 04 июля 2011

Файл включен в контекст функции load_snippet() и поэтому содержит только те переменные, которые существуют в этой функции. Один из способов изменить это - заставить вашу функцию принимать две переменные: имя файла и массив значений.

public function load_snippet($snippet, $content) {  
    if (is_array($content)) extract($content);
    if (file_exists("app/".$this->APP_TYPE."/snippets/".$snippet.".php")) {  
        include "app/".$this->APP_TYPE."/snippets/".$snippet.".php";  
    } else {  
        include 'common/txt/404.txt';  
    }  
}

Тогда

$arr = array('variable' => 'Hello world!');
load_snippet('slider', $arr);
1 голос
/ 04 июля 2011

Я думаю, что включение внутри функции не имеет смысла для меня ... Я думаю, что вы должны поместить в функцию

global $variable;

Обратите внимание, что include поместит код внутри функции (include будет заменен накод) как я знаю ..

0 голосов
/ 04 июля 2011

Вместо этого вы можете использовать константы, такие как define ('VARIALABLE', 'value'). который будет доступен вам в любом месте вашего файла

0 голосов
/ 04 июля 2011

Если вам нужно $variable внутри метода App::load_snippet(), вероятно, было бы лучше передать его в:

public function load_snippet($snippet, $var='Hello world'){
   if(file_exists("app/".$this->APP_TYPE."/snippets/".$snippet.".php")){
           include "app/".$this->APP_TYPE."/snippets/".$snippet.".php";
       }else{
           include 'common/txt/404.txt';
       }
   }
   //do something with $var
}

Вы можете установить значение по умолчанию, если $variable не было установлено. Нет глобальных переменных и переменных вне области видимости.

0 голосов
/ 04 июля 2011

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

global $variable;

Над включением.

0 голосов
/ 04 июля 2011

То, как вы делаете это, уродливо, но вы можете использовать global $variable внутри фрагмента для ссылки на переменную.Однако, если вы включите фрагмент внутри функции или метода, вам придется сделать переменные в этой функции / метод также глобальными

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