我已经阅读了很多主题,请继续讨论问题所在,可能听起来像是重复的条目,但是诚挚的,我没有正确地理解它们,因此,我期待一个合理的解释。
我正在重新创建一个框架(为了了解框架的工作原理,将不予以实施)。结构如下:
App
App/Core
App/Core/Controllers
App/Core/Controllers/Home
App/Core/Models
App/Core/Views
App/Libraries
App/Libraries/vendor
App/Libraries/composer.json
App/init.php
index.php
.htaccess
这是我的composer.json文件
{
"autoload": {
"psr-4": {
"App\\": "App"
}
}
}
这是我的index.php文件
const CONTROLLERS = 'App/Core/Controllers/';
require_once 'App/init.php';
$time = microtime(true);
new App\Init();
这是我的init.php类
namespace App;
require_once __DIR__ . '/Libraries/vendor/autoload.php';
use App\Controller;
class Init
{
private $resource;
private $object;
private $file;
const HOME = 'home';
function __construct()
{
$this->resource = empty($_GET) ? array(self::HOME) : self::Uri($_GET['resource']);
$class = self::Object($this->resource);
new App\Controller\$class;
}
private function Uri($_resource)
{
if($_resource != ucfirst(self::HOME))
{
$this->resource = explode('/', filter_var(rtrim($_resource, '/'), FILTER_SANITIZE_URL));
}
return $this->resource;
}
private function Object($_resource)
{
$this->object = ucfirst($_resource[0]);
$this->file = CONTROLLERS . $this->object . '.php';
if(file_exists($this->file))
{
require $this->file;
return $this->object;
}
else
{
echo 'Nope';
}
}
}
这是我的Home.php类
namespace App\Controller;
class Home
{
public function __construct()
{
echo '<br>I am at home';
}
}
我得到的错误是:
解析错误:语法错误,意外的'$ class'(T_VARIABLE),期望的标识符(T_STRING)
请在这里帮助我,让我发疯,试图了解为什么我使用新的App \ Controller \ Home;它的工作原理,但如果我使用$ class崩溃。我什至没有运气就尝试过新的App \ Controller {$ class}。
无论如何,希望得到一个明确的答案,因为可能很多人都会遇到相同的问题
谢谢大家
答案 0 :(得分:2)
在使用变量之前,您需要构造它:
$controller = "App\\Controller\\{$class}";
new $controller();