PHP变量失去了它们的价值?

时间:2014-07-04 15:24:51

标签: php

所以,我正在尝试使用PHP构建模板加载器系统。这是我到目前为止所得到的:

的config.php:

<?php
$style_assets_path = "/includes/styles/";
$template = "";
if ($_GET['pageid'] <= 100) {
    $template = "/main/main.php";
}
function loadTemplate() {
    global $style_assets_path;
    global $template;
    require_once dirname(__FILE__) . $style_assets_path . "templates" . $template;
}
?>

home.php:

<?php
$page_title = "Homepage";
$menu_selected = "active";
$menu_selected_2 = "";
$menu_selected_3 = "";
$menu_selected_4 = "";
$content_heading = "Featured Content";
$page_contents = "";
$special_id = "home";

require_once dirname(__FILE__) . "/config.php"; 

if ($_GET['pageid'] !== '1'){
    header('Location: /home.php?pageid=1');
    exit(0);
}

loadTemplate();
?>

所以变量:

$page_title = "Homepage";
$menu_selected = "active";
$menu_selected_2 = "";
$menu_selected_3 = "";
$menu_selected_4 = "";
$content_heading = "Featured Content";
$page_contents = "";
$special_id = "home";

即使声明了它们也没有它们的值?

我做错了什么?

2 个答案:

答案 0 :(得分:0)

include()require()的工作方式就像您将所包含的文字切换/粘贴到您调用include() / require()的位置一样。由于您正在进行include() INSIDE函数调用,因此您设置的变量位于该函数的范围内。从函数返回时,变量将作为函数后清理的一部分进行销毁。

e.g。考虑一下:

inc.php:

<?php

$foo = 'bar';

test.php的:

<?php

function baz() {
   include('inc.php');
   echo "Inside baz(): $foo\n";
}
baz();
echo "Outside baz(): $foo\n";

你得到这个作为输出:

inside baz(): bar
PHP Notice:  Undefined variable: foo in /home/marc/test.php on line 9
Outside baz():

注意&#34;外面&#34;输出产生了一个未定义的变量通知。

答案 1 :(得分:0)

您正在函数内部调用require_once,因此只有局部变量和声明为global的变量才可用于所需文件。

function loadTemplate() {
    global $style_assets_path;
    global $template;
    require_once dirname(__FILE__) . $style_assets_path . "templates" . $template;
}

您需要将所有这些变量声明为全局变量。

function loadTemplate() {
    global $style_assets_path,
           $template,
           $page_title,
           $menu_selected,
           $menu_selected_2,
           $menu_selected_3,
           $menu_selected_4,
           $content_heading,
           $page_contents,
           $special_id;
    require_once dirname(__FILE__) . $style_assets_path . "templates" . $template;
}

<强>更新

目前尚不清楚文件的组织方式,但可能需要使用global设置所有变量。

global $page_title = "Homepage";

如评论中所述,这可能不是制作模板引擎的最佳方式。