首页 > 解决方案 > 包含的布局 PHP 中变量的可见性问题

问题描述

编辑:根据问题:参考:什么是变量范围,哪些变量可以从哪里访问,什么是“未定义变量”错误? 应该对我有用,但事实并非如此。我可能不明白一些东西,但我看不出错误在哪里。

我是 PHP 的新手,所以这个问题可能很简单而且很愚蠢。我有 3 个文件index.phpView.phplayout.php. 在View php我有一个 View 类定义和一个render()方法。其中,此方法包括来自文件的 HTML 模板layout.php

但是:在<main>标签中的 PHP 文件中,我有一段 php 代码(if语句),根据$page变量的值(在 PHP 文件中定义),它包含一个不同的文件

问题是这个变量在layout.php文件中显示为未定义。我不明白为什么,最后所有代码都在执行index.php:包含视图类和渲染函数包含layout.php

请帮助我理解这一点,因为我做不到。提前致谢。

注意:未定义变量:第 17 行 C:\xampp\htdocs\notes\templates\layout.php 中的操作

索引.php

<?php

declare(strict_types=1);

namespace App;

require_once("src/utils/debug.php");
require_once("src/View.php");

$action = $_GET['action'] ?? null;

$view = new View();

$view -> render($action );

查看.php

<?php

declare(strict_types=1);

namespace App;

class View
{
    public function render(?string $page): void
    {
        include_once("templates/layout.php");
    }
}

布局.php

<html>
<head>

</head>
<body>
<header>
    <h1>Nagłówek</h1>
</header>
<nav>
    <ul>
        <li><a href="index.php/?action=list">Lista notatek</li>
        <li><a href="index.php/?action=create">Nowa notatka</li>
    </ul>
</nav>
<main>
    <?php
    if ($page === 'create') {
    include_once("templates/pages/list.php");
    } else {
    include_once("templates/pages/create.php");
    }
     ?>

</main>
<footer>

</footer>
</body>
</html>

标签: phpoopmodel-view-controllerscope

解决方案


推荐阅读