2016-02-20 3 views
1

Это основной класс моего проекта, и я использую массив для хранения классов (не уверен, что это лучший способ), но при использовании строки ниже ...PHP-код не работает как ожидалось (классы)

$this->getController("config")->loadConfiguration(); 

На самом деле это не загружает конфигурацию? и когда я получаю доступ к нему в классах $ this-> вместо функции getController, он говорит, что он пуст?

Я также получаю эту ошибку .. (EDIT) Фатальная ошибка: Вызов функции члена loadConfiguration() на не-объект

Вот весь мой класс:

<?php 
defined("SECURE") or exit('Please define SECURE keyword to continue.'); 
class miracle 
{ 
    //Usage: $this->getController("test")->run(); 

    private $classes; 

    public function __construct() 
    { 
     $classes = array(); 
    } 

    public function run() 
    { 
     $this->loadClasses(); 
     $this->getController("config")->loadConfiguration(); 
    } 

    public function getController($c) 
    { 
     return $classes[$c]; 
    } 

    private function loadClasses() 
    { 
     $this->classes["template"] = new template(); 
     $this->classes["config"] = new config(); 
    } 
} 
?> 
+0

так что уменьшите поверхность проблемы: это * вызов * 'loadConfiguration'? (вставьте эхо/печать там, посмотрите, что произойдет). Если нет, то проблема заключается в том, что он не вызывает вашу функцию, а не о том, что ваш код не выполняет то, что находится внутри этой функции. Если это так, то проблема не в структуре классов. –

+0

'$ classes' находится в области метода. '$ this-> classes' находится в классе. – frz3993

+0

Эхо все, что там, на данный момент, оно не эхо. –

ответ

0

Вам нужно для возврата:

public function getController($c) 
{ 
    return $this->classes[$c]; 
} 

Возможно, вы должны использовать классы $ this-> в своем конструкторе.

+0

Мог ли расширить, почему я должен использовать $ this? Я имею в виду, что это всегда так. –

+0

'$ this' дает вам область действия внутри класса. Когда вы определяете переменную в классе, вы не будете использовать '$ this', но после этого каждая ссылка должна использовать' $ this'. – mkaatman

4

У вас ошибка в __constructor и getController методами:

[...] 

private $classes; 

public function __construct() 
{ 
    $this->classes = array(); 
} 

[...] 

public function getController($c) 
{ 
    return $this->classes[$c]; 
} 
0

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

$this->classes["template"] = new template(); 
$this->classes["config"] = new config(); 

Вы пытаетесь создать новые объекты несуществующих классов. Вы можете использовать StdClass вместо как этот

$this->classes["template"]= new stdClass(); 
$this->classes["template"]->name='template'; 
0

Принимая беглый взгляд на ваш код, не используя вашу данную строку не называет функцию loadClasses(), предполагая, что это не был вызван до, классы никогда не загружаются в массив.

Попытайтесь назвать это так:

$this->loadClasses()->getController("config")->loadConfiguration();

Как это, ваша функция getController() должна вернуть переменную класса шириной, как это:

public function getController($c) 
    { 
     return $this->classes[$c]; 
    } 

То же изменения также должно быть сделано для вашего конструктора классов.

Все это работает в предположении, что классы template и config определены в другом месте вашего проекта, включены и доступны в текущем пространстве имен.

Смежные вопросы