代码之家  ›  专栏  ›  技术社区  ›  Irvan Hilmi

php-包括一个放在类变量中的类

  •  1
  • Irvan Hilmi  · 技术社区  · 7 年前

    我在PHP代码的类中编写了这种语法

    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 ,我已经把变量 $config 作为 public . 宣布为 public $config 在教室里。

    但问题是,当我试图访问变量时 $CONFIG ,带语句 $this->config 并在内部调用方法 配置 类,像 $this->config->something(); 像这样的错误。

    致命错误:未捕获错误:不在对象上下文中时使用$this

    另外,我已经确保类和方法 组态PHP 在 公众的 范围。

    这里 组态PHP 文件

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

    有什么可能为什么要这样做吗?使类存储在类中的变量上 公共$配置 ?

    感谢您的纠正和建议。

    2 回复  |  直到 7 年前
        1
  •  2
  •   jeroen    7 年前

    问题是:

    public static function cmp_header() {
    

    这是一个静态方法,因此在该方法中没有 $this 就像你可以只用类名来调用它,而不是在特定的对象上调用它。

    注意,当您解决这个问题时,您将遇到另一个问题,即不能嵌套类声明。您应该将类包含在文件的顶部,或者更好的做法是使用自动加载来加载所需的类。

        2
  •  0
  •   Álvaro González    7 年前

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

    class A{}
    
    function create_b()
    {
        class B{}  
    }
    

    …但不是 this :

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

    这就是语言的工作原理。

    不过,在您的情况下,我怀疑您甚至没有尝试嵌套类。移动 include 语句放在文件的顶部(或者更好地实现类的自动加载),这将得到解决。

    最后但并非最不重要, cmp_header() 不能同时为静态属性和访问实例属性。要么使之成为常规方法,要么完全改变设计并通过 config 作为帕拉姆:

    public static function cmp_header(config $config) {
        if($config->something()) {
    
    推荐文章