全局变量不起作用

时间:2012-12-05 10:56:42

标签: php global

我试图在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

}}

现在它给了我一个错误,未定义的变量。这怎么可能,因为我在父构造函数中使它成为全局的?

感谢您的帮助!

4 个答案:

答案 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

}