2013-06-07 2 views
0

Как передать переменные для включенного файла, если эти переменные поступают из extract().PHP extract() и include() -> передающие переменные

Кодекса

<?php 
    $hello = 'hello'; 
    include('world.php'); 
?> 

<?php //world.php 
    echo $hello; 
?> 

работает как шарм

Но что, если?

<?php 
    $arr = array('hello' => 'hello'); 
    extract($arr); 
    echo $hello //it will print : hello 
    include('world.php'); 
?> 

<?php //world.php 
    echo $hello; //it will print an error: Notice: Undefined variable: hello 
?> 

Итак, как передать «извлеченные» переменные во включенные файлы?

+0

В вашем скрипте есть ошибка синтаксического анализа, отсутствующая точка с запятой после 'echo $ hello'. –

+0

Возможно, это недостающий ';', но вы ошибаетесь, переменная является переменной, независимо от того, как вы ее создаете, и ваш второй пример должен работать нормально, если нет других ошибок. – jeroen

+0

@jeroen: может ли это быть любой конфигурационный параметр php? например (он устарел с php 5.3) или любой другой на php.ini? –

ответ

1

Переменная будет доступна в объеме включенного файла.

так что если у вас есть

$arr = array("who"=>$world); 
extract($arr); 

в включаемые вы могли бы

Hello <?= $who ?> 

Это простой способ сделать низкую шаблонную функцию жира, например:

function renderTemplate($template, $args){ 
    extract($args); 
    include($template); 
} 

Поскольку вызов экстракции выполняется в функции, он не загрязняет глобальное пространство и позволяет легко преобразовать отправленная нотация для не-программных типов.

+0

Это именно то, что я хочу и что я сделал до сих пор, но по какой-то причине он не работает на моем localhost. –

+0

выдает сообщение об ошибке до 11 и видит, получаете ли вы что-нибудь. Также помните, что php в шаблоне должен быть в '' – Orangepill

+0

. Также, если вам интересно, у меня есть небольшой [игрушечный проект] (https://github.com/cgray/templar) на github, который вроде бы поднимает эту технику путем включения включения в анонимную функцию, поэтому итеративный результат приводит к единственному попаданию в файловую систему. Мне было бы интересно, что люди думают об этом. – Orangepill

Смежные вопросы