gpt4 book ai didi

php - 在不使用全局变量的情况下在 PHP 函数之间共享变量

转载 作者:可可西里 更新时间:2023-11-01 13:36:50 24 4
gpt4 key购买 nike

我有一个与内存缓存服务器交互的类。我有不同的功能来插入、删除和检索数据。最初每个函数都调用了 memcache_connect(),但这是不必要的,例如:

mc->insert()  
mc->get()
mc->delete()

将建立三个内存缓存连接。我通过为该类创建一个构造来解决这个问题:

function __construct() {
$this->mem = memcache_connect( ... );
}

然后在需要资源的地方使用 $this->mem,因此三个函数中的每一个都使用相同的 memcache_connect 资源。

没关系,但是如果我在其他类中调用该类,例如:

class abc
{
function __construct() {
$this->mc = new cache_class;
}
}
class def
{
function __construct() {
$this->mc = new cache_class;
}
}

然后它仍然进行两次 memcache_connect 调用,而它只需要 一次。

我可以使用全局变量来做到这一点,但如果不需要,我宁愿不使用它们。

示例全局实现:

$resource = memcache_connect( ... );

class cache_class
{
function insert() {
global $resource;
memcache_set( $resource , ... );
}
function get() {
global $resource;
return memcache_get( $resource , ... );
}

}

那么无论该类被调用多少次,都只会调用一次memcache_connect

有没有办法做到这一点,还是我应该只使用全局变量?

最佳答案

我会使用单例模式编写另一个类来获取内存缓存的唯一实例。像这样 -

class MemCache 
{
private static $instance = false;
private function __construct() {}

public static function getInstance()
{
if(self::$instance === false)
{
self::$instance = memcache_connect();
}

return self::$instance;
}
}

和用法-

$mc = MemCache::getInstance();
memcache_get($mc, ...)
...

关于php - 在不使用全局变量的情况下在 PHP 函数之间共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/550753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com