我目前正在创建博客系统,我希望变成一个完全的CMS的未来。
有两类/对象将是具有全局访问(和mysqli数据库连接并检查用户是否登录自定义类)是有用的。
我正在寻找一种方式来做到这一点,而不使用全局对象,并且如果可能的话,每次调用时没有通过对象的每个功能。
我目前正在创建博客系统,我希望变成一个完全的CMS的未来。
有两类/对象将是具有全局访问(和mysqli数据库连接并检查用户是否登录自定义类)是有用的。
我正在寻找一种方式来做到这一点,而不使用全局对象,并且如果可能的话,每次调用时没有通过对象的每个功能。
你可以使物体静止,那么您可以访问他们的任何地方。 例:
myClass::myFunction();
这将在脚本的任何地方工作。 你可能想不过就静态班念了,可能使用Singleton类来创建一个可以在任何地方使用的静态对象内部的普通班。
扩展
我认为你正在试图做的是非常相似,我与我的DB类来完成。
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.
}
会发生什么事是你得到的连接后,使用$对象= MyClass的:: get_connection(),您将能够定期做任何功能。
$object = myClass::get_connection();
$object->runClass();
扩展
一旦你这样做静态声明,你只需要调用get_connection和返回值赋值给一个变量。 随后的其余功能可以作为一类你$类=新MyClass的调用(因为这是我们所做的)相同的行为。 所有你做的是存储静态类中的类变量。
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();
你可以通过当前全局对象到构造。
<?php
class Foo {
protected $m_db;
function __construct($a_db) {
$this->m_db = $a_db;
}
}
?>
我最近改组我的框架,准备为我们公司的CMS的第二个版本。 我为了与普通的对象,以取代他们解开一个巨大的我做了静态的事情量。 在这样做,我创建了一个用来靠我经历和侵入核心文件的灵活性,数额巨大。 我现在只使用静态构造时,唯一的选择是全球性的功能,这些功能只与低级别的核心功能。
我要告诉我的bootstrap.php文件中的几行(我所有的请求获得通过文件发送,但你可以通过把它包含在每个文件的顶部达到相同的结果)向您展示了我的意思。 这是一个什么样你可能在你的情况下使用了相当丰厚的版本,但希望这个想法是有帮助的。 (这是所有稍微修改。)
//bootstrap.php
...
// CONSTRUCT APPLICATION
{
$Database = new Databases\Mysql(
Constant::get('DATABASE_HOST'),
Constant::get('DATABASE_USER'),
Constant::get('DATABASE_PASSWORD'),
Constant::get('DATABASE_SCHEMA')
);
$Registry = new Collections\Registry;
$Loader = new Loaders\Base;
$Debugger = new Debuggers\Dummy; // Debuggers\Console to log debugging info to JavaScript console
$Application = new Applications\Base($Database, $Registry, $Loader, $Debugger);
}
...
正如你所看到的,我都挺创建我的应用对象,我可以在构造函数中的其他对象的参数给他们访问这些“全局”必需品提供的选项。
数据库对象是不言自明的。 注册表对象充当对象我可能要在其他地方访问应用程序的容器。 装载机充当加载其他资源,如模板文件的工具。 并且调试器是有处理调试输出。
我可以,例如,更改数据库类,我实例化,瞧我有一个SQLite数据库的连接。 我可以改变类的调试器(如备注),现在我所有的调试信息将被记录到我的JavaScript控制台。
好了,现在又回到这个问题。 你如何给其他对象访问所有的呢? 您只需通过它在参数构造函数。
// still bootstrap.php
...
// DISPATCH APPLICATION
{
$Router = new Routers\Http($Application);
$Router->routeUri($_SERVER['REQUEST_URI']);
}
...
不仅如此,但我的路由器(或任何对象我就构建)更灵活,太。 现在,我可以只实例化我的应用对象不同,我的路由器将表现不同相应。
好吧,如果你已经有了一些对象,通过它指的是博客系统,您可以撰写这些对象成,所以他们是$blog->db()
和$blog->auth()
或什么的。