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

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;?>
 

ksnk

прохожий
в каком месте инклюда написано. что $name глобальное или заранее определенная?
 

Julike

Новичок
в каком месте инклюда написано. что $name глобальное или заранее определенная?
Ну я как бы написал же, или к примеру до того как вызывать сам шаблон, идет класс и фнуцкия Core::setToVars();

PHP:
global $name;

$name = $config['name'];
 

Julike

Новичок
Суть в том, что если тупо подключать инклюдом а не через класс, то все работает.
 

Julike

Новичок
Хорошо, переформулирую вопрос.
В каком месте функции getBlock сказано, что $name глобальная или заранее определенная?

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

ksnk

прохожий
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'.
 

Julike

Новичок
То есть, для того что бы мне просто вызвать часть сайта, мне необходимо передать в не все мои переменные?
 

ksnk

прохожий
Например с помощью 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');
 
Сверху