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会话中保存与数据库相关的对象。