Include через функцию класса, нет переменных

  • Автор темы Автор темы Julike
  • Дата начала Дата начала

Julike

Новичок
Добрый день, такой вопрос возникает, я дабы подключить часть когда использую функцию класса $Theme->GetBlock('name'); сам код функции просто подставляет name в include, но, когда файл подключается то в нем нельзя использовать заранее определенные или глобальные переменные.

Пример того, как это выглядит.

Одна из частей кода:
PHP:
<?php
$name = 'Имя';
$Theme = new Theme;
$Theme->getBlock('footer');

Класс Theme
PHP:
<?php class Theme 
{
    public function getBlock($name)
    {
        include($name . '.php');
    }
}

Файл footer.php
PHP:
Мое <?=$name;?>
 
в каком месте инклюда написано. что $name глобальное или заранее определенная?
 
Суть в том, что если тупо подключать инклюдом а не через класс, то все работает.
 
Хорошо, переформулирую вопрос.
В каком месте функции getBlock сказано, что $name глобальная или заранее определенная?

Я как phpшник phpшника спрашиваю, язык знаете? ;)
Относительно да. До того как вывести getBlocks, у меня идет установление всех глобальных переменных, или получение того же $config, и даже он не отображается.
 
PHP:
$name = 'Имя';

class Theme 
{
    public function getBlock($name)
    {
//eval( 'echo "My name". $name;');
        include($name . '.php');
    }
}
$Theme = new Theme;
$Theme->getBlock('footer');

include (так же как и eval) выполняется в контексте вызывающей его функции. Так что оба (и с eval ) примера выведут 'my name footer'.
 
То есть, для того что бы мне просто вызвать часть сайта, мне необходимо передать в не все мои переменные?
 
Например с помощью extract
PHP:
$name = 'Имя';

class Theme 
{

    private $variables=array();
    
    public function export($name,$value){
       $this->variables[$name]=$value;
    }
    public function getBlock($name)
    {
        $include_filename=$name . '.php';
        extract($this->variables);
//eval( 'echo "My name". $name;');
        include($include_filename);
    }
}
$Theme = new Theme;
$Theme->export('name',$name);
$Theme->getBlock('footer');
 
Сверху