本文介绍了如何避免使用PHP全局对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我目前正在创建博客系统,希望将来可以将其变成一个完整的CMS.
有两个对全局访问有用的类/对象(mysqli数据库连接和一个检查用户是否已登录的自定义类).
我正在寻找一种不使用全局对象的方法,并且尽可能避免每次调用对象时都将其传递给每个函数.
推荐答案
您可以将对象设置为静态,然后可以在任何地方访问它们.示例:
myClass::myFunction();
这将在脚本中的任何地方起作用.但是,您可能需要阅读静态类,并可能使用Singleton类在可以在任何地方使用的静态对象内部创建常规类.
扩展
我认为您要尝试的工作与我对数据库类所做的工作非常相似。
class myClass
{
static $class = false;
static function get_connection()
{
if(self::$class == false)
{
self::$class = new myClass;
}
return self::$class;
}
// Then create regular class functions.
}
发生的事情是,在使用$ object = myClass :: get_connection()获得连接后,您将能够定期执行任何功能.
$object = myClass::get_connection();
$object->runClass();
扩展
执行了静态声明后,只需调用get_connection并将返回值分配给变量即可.然后,其余函数可以具有与您通过$ class = new myClass调用的类相同的行为(因为这就是我们所做的).您要做的就是将class变量存储在静态类中.
class myClass
{
static $class = false;
static function get_connection()
{
if(self::$class == false)
{
self::$class = new myClass;
}
return self::$class;
}
// Then create regular class functions.
public function is_logged_in()
{
// This will work
$this->test = "Hi";
echo $this->test;
}
}
$object = myClass::get_connection();
$object->is_logged_in();