在PHP中使用单例而不是全局的数据库连接有什么好处?我觉得使用单例而不是全局会使代码变得不必要地复杂化.
$conn = new PDO(...);
function getSomething()
{
global $conn;
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
class DB_Instance
{
private static $db;
public static function getDBO()
{
if (!self::$db)
self::$db = new PDO(...);
return self::$db;
}
}
function getSomething()
{
$conn = DB_Instance::getDBO();
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
如果有一种更好的方法来初始化除全局或单例之外的数据库连接,请提及它并描述它相对于全局或单例的优势.
我有一个名为全局范围的变量${SYSTEM},其中SYSTEM是一个已定义的常量.我有很多类需要访问这个变量的函数,我发现global ${SYSTEM};每次都声明这很烦人.
我尝试声明一个类变量:public ${SYSTEM} = $GLOBALS[SYSTEM];但是这会导致语法错误很奇怪,因为我有另一个以这种方式声明类变量的类,似乎工作正常.我唯一能想到的是这个常数没有得到认可.
我已经设法用一个构造函数来解决这个问题,但我正在寻找一个更简单的解决方案.
编辑 全局$ {SYSTEM}变量是一个包含许多其他子数组的数组.不幸的是,似乎没有办法绕过使用构造函数...
我目前正在创建博客系统,我希望将来可以变成一个完整的CMS.
有两个类/对象可用于全局访问(mysqli数据库连接和一个用于检查用户是否已登录的自定义类).
我正在寻找一种不使用全局对象的方法,如果可能的话,每次调用时都不会将对象传递给每个函数.
我有一个与memcache服务器交互的类.我有不同的功能来插入,删除和检索数据.最初每个函数都调用了memcache_connect(),但这是不必要的,例如:
mc->insert()
mc->get()
mc->delete()
Run Code Online (Sandbox Code Playgroud)
会做三个memcache连接.我通过为类创建一个构造来解决这个问题:
function __construct() {
$this->mem = memcache_connect( ... );
}
Run Code Online (Sandbox Code Playgroud)
然后$this->mem在需要资源的任何地方使用,因此三个函数中的每一个都使用相同的memcache_connect资源.
这没关系,但是如果我在其他类中调用类,例如:
class abc
{
function __construct() {
$this->mc = new cache_class;
}
}
class def
{
function __construct() {
$this->mc = new cache_class;
}
}
Run Code Online (Sandbox Code Playgroud)
然后memcache_connect,当它只需要一个时,它仍然会进行两次调用.
我可以用全局变量做到这一点,但如果我不需要,我宁愿不使用它们.
示例全局实现:
$resource = memcache_connect( ... );
class cache_class
{
function insert() {
global $resource;
memcache_set( $resource , ... );
}
function get() {
global $resource;
return memcache_get( $resource …Run Code Online (Sandbox Code Playgroud)