我试图在PHP中创建自己的简单框架。它没问题,但我遇到了问题。
我将所有内容重定向回我的index.php,然后从那里开始加载类和函数。我把网址拆分成了段,工作正常..直到我想在课堂上使用这些段。
我有一个这样的主控制器类:
class SimpleController {
public function __construct()
{
global $uri;
print_r($uri);
}
}
它打印出$ uri变量就好了,但是当我为我的主页制作一个新的控制器时,我这样做:
class home extends SimpleController{
private $template = 'home'; // Define template for this page
public function __construct()
{
parent::__construct();
}
public function index()
{
print_r($uri);
$view = new View($this->template); // Load the template
}}
现在它给了我一个错误,未定义的变量。这怎么可能,因为我在父构造函数中使它成为全局的?
感谢您的帮助!
答案 0 :(得分:2)
不要使用" global"在PHP .. 只需在控制器中使用公共变量;
新代码:
abstract class SimpleController {
public $uri;
public function __construct($uri)
{
$this->uri = $uri;
}
}
class home extends SimpleController{
private $template = 'home'; // Define template for this page
public function index()
{
$this->uri; //This is the URI
$view = new View($this->template); // Load the template
}
}
要创建控制器,只需使用:
$controller = new home();
$controller->uri = "URI";
$controller->index();
编辑:从家中删除构造函数,当你想使用它时也传递$ uri。
答案 1 :(得分:1)
这是一个糟糕的设计。 你不应该依赖全球状态。而是在家中的costructor中传递$ uri。
答案 2 :(得分:0)
这怎么可能,因为我在父构造函数中使它成为全局的?
这是一个新范围,因此如果要访问它,则必须再次将其标记为全局(global $uri;
)。
但这是一个糟糕的设计,使用成员或类变量。
答案 3 :(得分:0)
正如@ yes123所说,你的设计非常糟糕,你应该避免使用全局变量。否则,当您想要使用全局变量时,需要在每个函数中使用global
,将代码更改为:
public function index()
{
global $uri;
print_r($uri);
$view = new View($this->template); // Load the template
}