php - 命名空间 + 框架 + 作曲家
问题描述
我已经阅读了很多主题,请继续关注问题所在,可能听起来像是重复的条目,但说实话,我没有正确理解它们,所以我期待一个合理的解释。
我正在重新创建一个框架(不被实现,只是为了了解框架是如何工作的)。结构如下所示:
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}。
无论如何希望得到一个明确的答案,因为可能很多人都会遇到同样的问题
谢谢大家
解决方案
您需要在使用它之前构造变量变量:
$controller = "App\\Controller\\{$class}";
new $controller();
推荐阅读
- php - URL 重复自身
- ios - 没有与键 CodingKeys 关联的值 - JSONDecoder 错误
- javascript - 使用 Javascript 验证 Select 属性
- javascript - 从 JavaScript 复制和粘贴文本
- reactjs - React Accordion 组件,在处理程序后从崩溃中调用钩子
- p2 - Eclipse p2 NoSuchAlgorithmException:找不到 1.2.840.113549.1.1.11 的算法
- javascript - 图像仅在给定链接时显示,而不是路径
- android - Android Blackberry:如何使用黑莓访问在应用程序内呈现视图
- java - Gson - 为什么我的循环会弄乱我的 json 文件?
- java - 为什么我的 JAR 文件不运行?(IntelliJ、JavaFX、Maven)