Php 作为静态类变量访问全局变量

Php 作为静态类变量访问全局变量,php,Php,假设我有以下课程: class SQLMapper{ static find_user_by_id($id){ //sql logic here, using the $_DATABASE global to make a connection } } 我可以简单地说: global $_DATABASE; 在我的函数顶部,但我不想对所有静态方法都这样做。有没有办法在我的类中获取一个静态变量来引用全局$\u数据库数组 编辑:我不能在构造函数中分配它,因为这都是

假设我有以下课程:

class SQLMapper{
    static find_user_by_id($id){
        //sql logic here, using the $_DATABASE global to make a connection
    }
}
我可以简单地说:

global $_DATABASE;
在我的函数顶部,但我不想对所有静态方法都这样做。有没有办法在我的类中获取一个静态变量来引用全局$\u数据库数组


编辑:我不能在构造函数中分配它,因为这都是静态的,而且从来没有调用过构造函数。

对不起,我不太明白你的意思,但是你能尝试使用吗?

你可以使用超级全局数组
$\u GLOBALS
来访问你的
$\u数据库
变量。例如:

query( $GLOBALS['_DATABASE'], 'some query' );
或者,编写一个返回该变量内容的静态函数:

class SQLMapper
{
    static function getDatabase()
    {
        global $_DATABASE;
        return $_DATABASE;
    }

    static function find_user_by_id($id)
    {
        query( self::getDatabase(), 'some query' );
    }
}
如果疼痛,很可能是你受伤了 做错了

首先,如果没有看到更多的代码,就不可能提供更具体的解决方案,但我强烈建议您重新安排类结构,以便静态函数(听起来像是有一长串要实现的)变成非静态的。p>

本质上,您应该考虑访问Sql MappER的实例化实例,然后从实例中调用适当的方法。使用这个范例,您可以为$\u数据库实例化一个类级属性,然后该属性可以被类中的所有方法自由引用

例如:

class SQLMapper {

    private $_db;

    public function __construct()
    {
        global $_DATABASE;

        $this->_db = $_DATABASE;
    }

    public function find_user_by_id($id) {

        $sql = "Select * from User WHERE Id = ?";

        $stmt = $this->_db->prepare($sql, $id);

        return $stmt->execute();
    }
}

尽管如此,使用全局变量通常是代码质量差的标志,所以我建议您考虑采用面向对象的方法来解决当前的设计问题,并从应用程序中寻找消除全局错误的方法和方法。

为什么所有这些都必须是静态的?这将比注释更能说明问题。