2014-01-29 5 views
0

Я пытаюсь инициировать класс по требованию.Инициировать класс по запросу

class MyClass{ 

    private $modules = array("mod1" => false); 

    public function __get($name){ 
     if(array_key_exists($name, $this->modules) && !$this->modules[$name]){ 
      $class  = ucfirst($name); 
      $this->$name = new $class(); 
      $this->modules[$name] = true; 
     } 
    } 
} 

У меня тогда есть другой класс, который затем расширяет класс выше. Если я следующий класс не получает инициирован, и я получаю сообщение об ошибке Fatal error: Call to a member function get() on a non-object

class Home extends MyClass{ 

    public function main(){ 
     echo $this->mod1->get("cat"); 
    } 

} 

Но если я сделаю это, класс действительно становится инициатором.

class Home extends MyClass{ 

    public function main(){ 
     $this->mod1; 
     echo $this->mod1->get("cat"); 
    } 

} 

Есть ли способ для меня инициировать класс, не добавляя лишнюю строку?

ответ

1

Просто вернуть его после того, как это экземпляр:

class MyClass{ 

    private $modules = array("mod1" => false); 

    public function __get($name){ 
     if(array_key_exists($name, $this->modules) && !$this->modules[$name]){ 
      $class  = ucfirst($name); 
      $this->$name = new $class(); 
      $this->modules[$name] = true; 

      return $this->$name; 
     } 
    } 
} 

Теперь вы можете делать то, что вы хотите:

class Home extends MyClass{ 

    public function main(){ 
     echo $this->mod1->get("cat"); 
    } 

} 
+0

ха-ха, ничего себе, я не могу поверить, что я никогда не думал об этом, спасибо за Помогите! –

+0

@RyanNaddy Нет проблем! ;) –

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