Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的重用对象_Php_Mysql_Session_Global Variables - Fatal编程技术网

PHP中的重用对象

PHP中的重用对象,php,mysql,session,global-variables,Php,Mysql,Session,Global Variables,我有一个类,包括mysqllink和其他类。我在加载首页时创建此类的对象,但在重新加载页面时不想再次创建 mysql无法存储在会话中,因此是否有其他方法全局保存对象?一些选项: 使用APC缓存缓存对象 序列化()对象并将其保存到文件中。再次需要时,请阅读该文件并调用unserialize() 请记住,您将无法以这种方式存储资源。正如其他人所提到的,您将希望对对象的该部分使用持久连接 编辑我想我会对此进行一点阐述,因为无法保存mysql连接存在一个明显的问题,并且会收到评论 若要在包含数据库连

我有一个类,包括
mysql
link和其他类。我在加载首页时创建此类的对象,但在重新加载页面时不想再次创建

mysql
无法存储在会话中,因此是否有其他方法全局保存对象?

一些选项:

  • 使用APC缓存缓存对象
  • 序列化()
    对象并将其保存到文件中。再次需要时,请阅读该文件并调用
    unserialize()

请记住,您将无法以这种方式存储资源。正如其他人所提到的,您将希望对对象的该部分使用持久连接

编辑我想我会对此进行一点阐述,因为无法保存mysql连接存在一个明显的问题,并且会收到评论

若要在包含数据库连接的对象上保存/还原,则需要处理无法序列化的位。您可以在序列化对象时取消设置属性,然后在未序列化对象时重新创建属性。PHP提供了两个方便的钩子,
\uuu sleep()
\uu wakeup()
,正是为了这个目的。您可以这样使用它们:

class SaveableConnection {

    $connection = null;

    public function __construct() {
        $this->connect();
    }

    public function connect() {
        // read config and connect
        $this->connection = new PDO($dso);
    }

    public function __sleep() {
        // get rid of the bit that cant be saved
        unset($this->connection);
    }

    public function __wakeup() {
        // re-create the bit that wasn't save on disk
        $this->connect();
    }
}
如果您使用的是持久数据库连接,
$this->connection
的值将通过从相关缓存复制连接来优化

对于任何暗示序列化的对象使用,您都可以使用相同的技巧:保存到文件、在memcached或APC中缓存,以及会话

某些选项:

  • 使用APC缓存缓存对象
  • 序列化()
    对象并将其保存到文件中。再次需要时,请阅读该文件并调用
    unserialize()

请记住,您将无法以这种方式存储资源。正如其他人所提到的,您将希望对对象的该部分使用持久连接

编辑我想我会对此进行一点阐述,因为无法保存mysql连接存在一个明显的问题,并且会收到评论

若要在包含数据库连接的对象上保存/还原,则需要处理无法序列化的位。您可以在序列化对象时取消设置属性,然后在未序列化对象时重新创建属性。PHP提供了两个方便的钩子,
\uuu sleep()
\uu wakeup()
,正是为了这个目的。您可以这样使用它们:

class SaveableConnection {

    $connection = null;

    public function __construct() {
        $this->connect();
    }

    public function connect() {
        // read config and connect
        $this->connection = new PDO($dso);
    }

    public function __sleep() {
        // get rid of the bit that cant be saved
        unset($this->connection);
    }

    public function __wakeup() {
        // re-create the bit that wasn't save on disk
        $this->connect();
    }
}
如果您使用的是持久数据库连接,
$this->connection
的值将通过从相关缓存复制连接来优化

对于任何暗示序列化的对象使用,您都可以使用相同的技巧:保存到文件、在memcached或APC中缓存,以及会话

这需要稍微修改连接代码,但不需要手动管理持久性(即,不需要在会话中手动放置某些内容)

不过,在继续前进之前,一定要充分阅读。这有很多含义

我想你想要的是

这需要稍微修改连接代码,但不需要手动管理持久性(即,不需要在会话中手动放置某些内容)


不过,在继续前进之前,一定要充分阅读。这有很多含义

如果您试图避免与MySQL建立多个连接,则可以使用持久连接

首先,在连接时,函数将首先尝试查找已打开的(持久)链接,该链接具有相同的主机、用户名和密码。如果找到,将返回该链接的标识符,而不是打开新连接


如果您试图避免与MySQL建立多个连接,则可以使用持久连接

首先,在连接时,函数将首先尝试查找已打开的(持久)链接,该链接具有相同的主机、用户名和密码。如果找到,将返回该链接的标识符,而不是打开新连接


很抱歉问你这个问题,为什么你想要这个?如果您保持mysql连接打开,可能会出现安全问题。您可以尝试使用持久连接。PHP将查找到数据库的开放连接,如果找到,将使用该连接,否则它将创建一个新的连接。抱歉,请购买您为什么要这样做?如果您保持mysql连接打开,可能会出现安全问题。您可以尝试使用持久连接。PHP将寻找到数据库的开放连接,如果找到,将使用该连接,否则它将创建一个新连接。“请记住,您将无法以这种方式存储资源。”--MySQL连接是一种资源。我认为这不会解决MySQL连接会话。不过,这是重用实例化对象的好方法。在这里,速度往往胜过完整性。但无论如何,请仔细阅读我的扩展解决方案。它可以让您在
$\u会话中保存与数据库相关的对象。请记住,您将无法以这种方式存储资源。MySQL连接是一种资源。我认为这不会解决MySQL连接会话。不过,这是重用实例化对象的好方法。在这里,速度往往胜过完整性。但无论如何,请仔细阅读我的扩展解决方案。它将允许您在
$\u会话中保存与数据库相关的对象。