Создать новый объект из переменной

Я использую следующий класс для автозагрузки всех моих классов. Этот класс расширяет основной класс.

class classAutoloader extends SH_Core { public function __construct() { spl_autoload_register(array($this, 'loader')); } private function loader($class_name) { $class_name_plain = strtolower(str_replace("SH_", "", $class_name)); include $class_name_plain . '.php'; } } 

Я создаю экземпляр этого класса в __construct() моего основного класса:

 public function __construct() { $autoloader = new classAutoloader(); } 

Теперь я хочу иметь возможность создавать объекты класса loader следующим образом:

 private function loader($class_name) { $class_name_plain = strtolower(str_replace("SH_", "", $class_name)); include $class_name_plain . '.php'; $this->$class_name_plain = new $class_name; } 

Но я получаю следующую ошибку, вызывающую $core-template следующим образом:

 require 'includes/classes/core.php'; $core = new SH_Core(); if (isset($_GET['p']) && !empty($_GET['p'])) { $core->template->loadPage($_GET['p']); } else { $core->template->loadPage(FRONTPAGE); } - require 'includes/classes/core.php'; $core = new SH_Core(); if (isset($_GET['p']) && !empty($_GET['p'])) { $core->template->loadPage($_GET['p']); } else { $core->template->loadPage(FRONTPAGE); } - require 'includes/classes/core.php'; $core = new SH_Core(); if (isset($_GET['p']) && !empty($_GET['p'])) { $core->template->loadPage($_GET['p']); } else { $core->template->loadPage(FRONTPAGE); } 

Ошибка:

Примечание. Неопределенное свойство: SH_Core :: $ template в /home/fabian/domains/fabianpas.nl/public_html/framework/index.php в строке 8
Неустранимая ошибка: вызовите функцию-член loadPage () для не-объекта в /home/fabian/domains/fabianpas.nl/public_html/framework/index.php в строке 8

Он автоматически загружает классы, но просто не запускает объект, потому что, используя следующий код, он работает без проблем:

 public function __construct() { $autoloader = new classAutoloader(); $this->database = new SH_Database(); $this->template = new SH_Template(); $this->session = new SH_Session(); } 

Ты пробовал:

 $this->$class_name_plain = new $class_name(); 

вместо?

Я решил это, используя:

 private function createObjects() { $handle = opendir('./includes/classes/'); if ($handle) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $object_name = str_replace(".php", "", $file); if ($object_name != "core") { $class_name = "SH_" . ucfirst($object_name); $this->$object_name = new $class_name(); } } } closedir($handle); } }