【发布时间】:2022-07-31 18:16:05
【问题描述】:
我想在循环中创建一些类,我在变量中给出类的名称。
我收到一个错误:
致命错误:未捕获的错误:类名必须是有效对象或...中的字符串
我该怎么做?
<?php
$xml = simplexml_load_file('routes.xml');
$routes = $xml->Route;
for($i =0; $i<count($routes); $i++){
$uri = $routes[$i]->attributes()->uri;
$name = $routes[$i]->attributes()->name;
Route::set($uri, function(){
$name::CreateView();
});
}
?>
文件 XML
<?xml version="1.0" encoding="utf-8" ?>
<Routes>
<Route name="Home" uri="" controller="Home"/>
<Route name="AboutMe" uri="o-mnie" controller="AboutMe"/>
<Route name="Interests" uri="o-mnie/zainteresowania" controller="AboutMe" method="interests"/>
<Route name="Contact" uri="kontakt" controller="Contact"/>
</Routes>
【问题讨论】:
-
为什么要这样做?你有一个带有静态函数 CreateView 的 Home 类吗?那是什么设计模式?
-
是的,我有一个带有静态函数 CreateView 的 Home 类,我只想使用一个变量作为类名,但我不知道如何
-
为什么 PHP 生态系统仍然如此热衷于使用字符串、数组和反射?为什么要使用 XML 发明自己的 MVC 框架?像这样的代码属于框架,如果您不知道如何编写和调试自己的框架,请使用现有的框架。错误非常简单:
$name中的任何内容都不是字符串。研究该错误并调试您的代码。您可能还想阅读controller属性,而不是name。此外,在您的设计中,您需要在 XML 中创建一个控制器类和一个 Routes 条目才能使其正常工作。 -
@CodeCaster,我个人认为学习如何编写自己的框架的最佳方法是反复试验。很常见的是,我理解为什么要做的事情更多地取决于我面临的错误和问题,而不是仅仅编写有效的代码。尽管我认为这一点超出了回答此类问题的范围 - 恕我直言。
-
@Nigel 当然,编写自己的 MVC 框架来掌握 HTTP 和 URL 路由的工作原理是很好的。但是,如果您无法阅读和研究运行时错误并调试代码(例如,将变量转储到输出或 $deity 禁止使用调试器检查变量以查看它们实际包含的内容),那么创建 MVC 框架可能是一座桥太远了。