Я впервые использую PHP ООП и Пространство имен.Я пытался загрузить класс динамически, но всегда получал ошибку.Fatal error: Uncaught Error: Call to undefined function App\Controllers\DefaultController() in C:\xampp\htdocs\test\app\Core\Router.php:20
Я загружаю и ставлю пространство имен (PSR-4) с помощью Composer.Я хочу создать свой собственный MVC, прежде чем переходить к фреймворку.
test\app\Core\Router.php
<?php
namespace App\Core;
use App\Controllers\ErrorController;
class Router
{
protected $controller;
protected $action;
protected $params = [];
public function __construct()
{
$this->parseURL();
if(file_exists(APP_CTRL . $this->controller . ".php"))
{
//this is the problem.. the ErrorController() below works fine...
$class = "App\Controllers\\" . $this->controller;
$class();
}
else
{
$error = new ErrorController();
$error->error_404();
}
}
protected function parseURL()
{
$request = trim($_SERVER['REQUEST_URI'], '/');
if(!empty($request))
{
$url = explode('/', $request);
$this->controller = isset($url[0]) ? ucfirst($url[0]) . 'Controller' : 'DefaultController';
$this->action = isset($url[1]) ? $url[1] : 'index';
unset($url[0], $url[1]);
$this->params = !empty($url) ? $url : [];
}
else
{
$this->controller = 'DefaultController';
$this->action = 'index';
}
}
}
Что касается моего контроллера.
test\app\Controllers\DefaultController.php
<?php
namespace App\Controllers;
class DefaultController extends Basecontroller
{
public function index()
{
echo 'Hi from Default';
}
}
Попробовал с помощью этого Вызов класса в пространстве имен по переменной в PHP , но он не работает
Уже проверено это: https://coderwall.com/p/kiz5nq/instantiating-a-namespaced-php-class-dynamically и https://www.designcise.com/web/tutorial/how-to-dynamically-invoke-a-class-method-in-php