Я хочу динамически создавать экземпляры некоторых классов, но я получил сообщение об ошибке, говорящее о том, что класс не найден (если он вызывается динамически из строки), в противном случае, если я обычно создал экземпляр класса, набрав имя класса "без использования strings", он будет успешно создан.
Ошибка:
Неустранимая ошибка: класс SiteController не найден в C:\wamp\www\framework\controllers\RouterController.php в строке 31
ядро/Контроллер.php
namespace core;
class Controller{
function __construct(){
$files = glob('./' . '/*.php');
foreach ($files as $file) {
require_once($file);
}
}
}
контроллеры/RouterController.php
namespace controllers;
require_once("core/Controller.php");
use \core\Controller;
use \controllers\SiteController;
class RouterController extends Controller{
private $url;
private $controller;
private $controllerName;
private $action;
function __construct($url){
parent::__construct();
$this->url = $url;
$this->splitUrl();
// the following is working successfully
$this->controller = new SiteController();
$this->controller->{"$this->action"}();
if($this->controllerName != '' && $this->action != ''){
// but this is not working
$this->controller = new $this->controllerName();
$this->controller->{"$this->action"}();
}
}
private function splitUrl(){
$url = preg_split("#/#", $this->url);
$this->controllerName = !empty($url[0]) ? ucfirst($url[0])."Controller" : null;
$this->action = !empty($url[1]) ? $url[1] : "index";
}
}
контроллеры/SiteController.php
namespace controllers;
class SiteController{
public function index(){
echo "this is index";
}
}
$this->controller = new SiteController();
? - person splash58   schedule 27.11.2017$this->controller = new $this->controllerName();
- person Mohammad   schedule 27.11.2017'\controllers\SiteController'
- person Philipp Maurer   schedule 27.11.2017