php - 在 __constructor 中将全局变量设置为类
问题描述
如何在此类中将 as 设置class DB
为全局,因为我不想在所有函数中添加. 如果我在所有功能中设置它可以工作,但在它不起作用。$db
_constructor
global $db
global $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("......");
}
}
?>
解决方案
我认为你的使用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,没有办法强制全局变量在每个局部函数的范围内可用。
推荐阅读
- ios - UIImageView 大小相对于屏幕大小
- java - 如何通过 while 循环计算我的 textViews?
- python-3.x - 使用 pyvmomi 创建 VMware HA 集群会引发异常
- trace32 - 我可以显示类型转换为特定结构类型的内存地址(d.dump)吗?
- sql - 如何计算 SQL Server 中每一列(在单个表中)的数据长度?
- html - 我的字体大小或文本字段大小的设置被忽略
- javascript - Formik - 在错误消息中使用大写首字母字段名称
- lua - 为什么函数l`ua_upvalueindex`的参数`n`可以是256?
- java - 标题后的空白行
- python-3.x - Python xmlsec XML 签名值不匹配