PHP - 包括 class 一个放在 class 变量中

PHP - Including class an put inside class variable

我在 php 代码中的 class 中写了这个语法

public static function cmp_header() {
    ?>
    <div class="header">
        <div class="upside">
            <div class="upside-layout layout">
                <div class="title">
                    <span class="logo">
                        <img src="<?php echo me_url ?>images/websites/logo-meapp.png" alt="">
                    </span>
                    <span class="label">MeApp</span>
                </div>
                <div class="navigation">
                    <div class="navigation-layout layout">
                        <?php
                            if($this->config->something()) {
                                ?>
                                <div class="masuk no-events menu" atr="redirect/masuk">
                                    <div class="masuk click-events header-button menu" atr="redirect|daftar">Welcome, Irvan Hilmi</div>
                                </div>
                                <?php
                            } else {
                                ?>
                                <div class="masuk no-events menu" atr="redirect/masuk">
                                    <div class="masuk click-events header-button menu" atr="redirect|daftar">Daftar</div>
                                </div>
                                <div class="masuk no-events menu" atr="redirect/masuk">
                                    <div class="masuk click-events header-button menu" atr="redirect|masuk">Masuk</div>
                                </div>
                                <?php
                            }
                        ?>
                        <div class="# no-events menu" atr="do/toggle-more-menu">
                            <div class="# click-events header-button menu" atr="do|toggle-more-menu">#</div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <?php
}
public function __construct() {
    require_once('config.php');
    $this->config = new config();
}

config.php 文件有一个名为 config 的 class,我已经将变量 $config 设为 public。在 class.

中用 public $config 声明

但问题是,当我尝试使用语句 $this->config 访问变量 $config 并调用 config class 中的方法时,例如 [=23] =] 像这样的错误。

Fatal error: Uncaught Error: Using $this when not in object context

此外,我已经确保 class 和 config.php 中的方法在 public 范围内。

这里是 config.php 文件

class config {
    public function something() {
        // the method script here
    }
    public function __construct() {
        // nothing just yet
    }
}

有没有可能为什么要这样做?使 class 存储在 class 内的变量中,例如 public $config?

感谢您的指正和建议。

问题是这样的:

public static function cmp_header() {

这是一个静态方法,因此在该方法内部没有 $this,因为您可以仅使用 class 名称调用它,而不是在特定对象上调用它。

注意,当你解决这个问题时,你会运行进入另一个问题,那就是你不能嵌套class声明。您应该在文件顶部包含 class 或者 - 更好 - 使用自动加载来加载您需要的 classes。

您不能在任意位置创建 classes。例如,你可以这样做this:

class A{}

function create_b()
{
    class B{}  
}

...但不是例如this:

class A
{
    public function foo()
    {
        class B{}
    }
}
// Fatal error: Class declarations may not be nested

这就是语言的工作原理。

但是,对于您的情况,我怀疑您甚至没有尝试嵌套 classes。将 include 语句移动到文件顶部(或者,更好的是,实现 class 自动加载),这将得到解决。

最后但同样重要的是,cmp_header()不能同时是静态的和访问实例属性。要么使其成为常规方法,要么完全更改设计并将 config 作为参数传递:

public static function cmp_header(config $config) {
    if($config->something()) {