PHP - Включая класс, вставьте переменную класса - PullRequest
0 голосов
/ 26 декабря 2018

Я написал этот синтаксис внутри класса в своем 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 и вызываю метод внутри config класса, например $this->config->something();Это какая-то ошибка, подобная этой.

Неустранимая ошибка: Uncaught Ошибка: использование $ this, когда не в контексте объекта

Также я уже уверен, что класс и методвнутри config.php находятся в области видимости public.

Здесь файл config.php

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

Возможно ли это сделать?сделать класс хранящимся в переменной внутри класса, например public $config?

Спасибо за любые исправления и предложения.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы не можете создавать классы в произвольных местах.Например, вы можете сделать, например, 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()) {
0 голосов
/ 26 декабря 2018

Проблема заключается в следующем:

public static function cmp_header() {

Это статический метод, поэтому внутри этого метода нет $this, так как вы можете вызывать его, используя только имя класса, а не вызывать его для определенногоobject.

Обратите внимание, что когда вы решите эту проблему, вы столкнетесь с другой проблемой, заключающейся в том, что вы не можете вкладывать объявления классов.Вы должны включить класс вверху файла или - лучше - использовать автозагрузку для загрузки нужных вам классов.

...