контроллер представления модели — шаблоны PHP и область видимости переменных

Я пытаюсь найти способ передачи неглобальных переменных во включенный документ.

page1.php

function foo()
{
$tst =1;
include "page2.php";
}

page2.php

echo $tst;

Как я могу сделать эту переменную видимой? и как бы я сделать это php шаблонизатор, чтобы я мог разделить тело заголовка и нижнего колонтитула для HTML-страниц. Как и в WordPress он имеет пользовательские функции WP, но я не вижу, чтобы они объявляли внешние файлы для их использования.

большое спасибо заранее.

0

Решение

Я думаю, что вы не совсем понимаете, что происходит. Страница 1, вероятно, должна делать эхо. Таким образом, вы включаете страницу 2, и функция foo теперь доступна. Вам нужно вызвать его так, чтобы он действительно выполнялся. Используйте ключевое слово global, чтобы ввести глобальную переменную в область действия функции. Тогда вы можете повторить это.

Страница 1:

include "page2.php";
foo();
echo $test;

страница 2:

function foo()
{
global $test;
$test =1;

}
1

Другие решения

Переменные в функции не видны вне их, когда они не являются глобальными. Но включение во функцию должно быть видно во втором файле.

$test="Big thing";
echo "before testFoo=".$test;

// now call the function testFoo();

testFoo();

echo "after testFoo=".$test;
Result : *after testFoo=Big thing*

function testFoo(){

// the varuiable $test is not known in the function as it's not global

echo "in testFoo before modification =".$test;

// Result :*Notice: Undefined variable: test in test.php
// in testFoo before modification =*

// now inside the function define a variable test.

$test="Tooo Big thing";
echo "in testFoo before include =".$test;

// Result :*in testFoo before include =Tooo Big thing*

// now including the file test2.php

include('test2.php');

echo "in testFoo after include =".$test;

// we are still in the function testFoo() so we can see the result of   test2.php
//  Result :in testFoo after include =small thing

}

в test2.php

echo $test;
/* Result : Tooo Big thing
as we are still in testFoo() we know $test
now modify $test
*/
$test = "small thing";

Я надеюсь, что это сделало вещи более ясными.

0

По вопросам рекламы [email protected]