假设我有以下课程:
class SQLMapper{
static find_user_by_id($id){
//sql logic here, using the $_DATABASE global to make a connection
}
}
我可以简单地打电话:
global $_DATABASE;
在我的函数顶部,但我不想对我的所有静态方法都这样做。有没有办法在我的类中获取一个静态变量来引用全局$ _DATABASE数组?
编辑:我无法在构造函数中分配它,因为这都是静态的,并且永远不会调用构造函数。
答案 0 :(得分:2)
您可以使用超全局数组$_GLOBALS
来访问$_DATABASE
变量。例如:
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' );
}
}
答案 1 :(得分:2)
如果疼,可能就是你 做错了。
首先,在没有看到更多代码的情况下,无法提供更具体的解决方案,但我强烈建议您考虑重新安排类结构,以便您的静态功能(听起来你有很长的列表他们实施)变得非静态。
实质上,您应该考虑访问SQLMapper的实例化实例,然后从实例中调用适当的方法。使用这个范例,您可以实例化$ _DATABASE的类级属性,然后可以由类中的所有方法自由引用。
例如:
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();
}
}
话虽如此,使用全局变量通常是代码质量差的一个标志,所以我还建议您考虑采用更加面向对象的方法来处理当前的设计,并寻找可靠的方法来完全消除应用程序中的全局变量
答案 2 :(得分:0)
我不太确定我明白你的意思,抱歉,你能尝试使用static keyword吗?