相关疑难解决方法(0)

Global或Singleton用于数据库连接?

在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)

如果有一种更好的方法来初始化除全局或单例之外的数据库连接,请提及它并描述它相对于全局或单例的优势.

php singleton design-patterns

79
推荐指数
3
解决办法
5万
查看次数

使一个全局变量可以访问类中的每个函数

我有一个名为全局范围的变量${SYSTEM},其中SYSTEM是一个已定义的常量.我有很多类需要访问这个变量的函数,我发现global ${SYSTEM};每次都声明这很烦人.

我尝试声明一个类变量:public ${SYSTEM} = $GLOBALS[SYSTEM];但是这会导致语法错误很奇怪,因为我有另一个以这种方式声明类变量的类,似乎工作正常.我唯一能想到的是这个常数没有得到认可.

我已经设法用一个构造函数来解决这个问题,但我正在寻找一个更简单的解决方案.


编辑 全局$ {SYSTEM}变量是一个包含许多其他子数组的数组.不幸的是,似乎没有办法绕过使用构造函数...

php variables global class function

13
推荐指数
3
解决办法
9万
查看次数

如何避免使用PHP全局对象?

我目前正在创建博客系统,我希望将来可以变成一个完整的CMS.

有两个类/对象可用于全局访问(mysqli数据库连接和一个用于检查用户是否已登录的自定义类).

我正在寻找一种不使用全局对象的方法,如果可能的话,每次调用时都不会将对象传递给每个函数.

php global

6
推荐指数
2
解决办法
9368
查看次数

在PHP中的函数之间共享变量而不使用全局变量

我有一个与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)

php oop global

5
推荐指数
2
解决办法
5696
查看次数

标签 统计

php ×4

global ×3

class ×1

design-patterns ×1

function ×1

oop ×1

singleton ×1

variables ×1