首页 > 解决方案 > 在 __constructor 中将全局变量设置为类

问题描述

如何在此类中将 as 设置class DB为全局,因为我不想在所有函数中添加. 如果我在所有功能中设置它可以工作,但在它不起作用。$db_constructorglobal $dbglobal $db__constructor

<?php

if(isset($_POST["login_button"]))
    {
            $login = new Login();
            $login->check();
    }

    class Login {
        protected $db;
        function __construct(){
            $this->db = $db;
            global $db;
        }

        function check (){
            $db->query("do something");
        }

        function ban (){
            $db->query("......");
        }
    }
?>

标签: phpclass

解决方案


我认为你的使用global有点过时了。global $db语义上意味着:$db是来自全局范围的变量,请在此函数的局部范围内使用 this。因此,我假设在您的代码或导入中, $db 在某处使用数据库对象进行了初始化。

如果是这样的话,反过来说也是有道理的:

        function __construct(){
            global $db; // first, make it locally visible
            $this->db = $db; // remember it for later use in this class
        }

但是:$db必须在创建类之前初始化。在您的示例代码中,没有提示它来自哪里以及它到底是什么。

假设它在创建 Login 实例之前已经被初始化,那么您可以使用

            $this->db->query("...");

在每一种方法中。global $db;因此,除了构造函数之外,无需编写任何其他方法。相反,请使用$this->db.

如果不使用 global,没有办法强制全局变量在每个局部函数的范围内可用。


推荐阅读