如何为我站点的所有传入连接在 PHP(Laravel 5) 中保留 class 的单个实例?
How to Keep a Single Instance of class in PHP(Laravel 5) for all the incoming connections to my site?
我正在开发基于 Laravel 5 的 Web 应用程序,我有一个 class "Connection" 作为单例实现的
<?php
class Connection{
private static $instance = NULL;
private static $connection = NULL;
private function __construct(){
self::connection=API::openConnection(); //just an example of connection (from other class)
}
public function getInstance(){
if(NULL==self::$instance)
{
self::$instance=new Connection;
}
return self::$instance;
}
现在我面临的问题是,每当连接获取实例并首次实例化它并打开连接时,但是当其他用户访问同一页面(较早的用户访问过)时,连接将重新打开(即 class 再次实例化),openConnection() 一次只能提供一个连接,当新用户打开连接时,前一个关闭。
有什么解决方案可以让我对多个用户请求使用单一连接吗?
注意:- 以上代码只是对实际问题的抽象,以获得一个想法。
感谢您的帮助。
如果我没看错您的问题,您是在询问是否可以根据一个请求打开一个连接,然后让访问该页面的其他用户使用该连接而无需重新打开它。
从纯粹的 PHP 层面上,您的问题的答案是否定的。 PHP 被设计成一个无状态的系统。进入系统的每个请求都会强制程序建立其状态,然后该状态会在每次连接结束时丢失。这符合当时所有模仿 HTTP 的系统设计风格。您所描述的模式在桌面或服务器计算编程环境中更为常见,在这些环境中,应用程序驻留在内存中。
您将在 PHP 中找到的是启用您正在谈论的那种持久连接的第三方库。例如,oracle 驱动程序 (oci8
) 有一个 connect function , and a pconnect function。后者实现了持久连接。这些库可以做到这一点,因为它们是在 C/C++ 中实现的——即,不是纯粹的 PHP。此外,每个图书馆对于 "persistent" 的含义都有自己的规则。
当您在 PHP 中实现单例时,您得到的对象将始终是该单例对象 仅针对该请求 。它与 java 中的单例概念相似,但由于 PHP 的 运行 时间模型大不相同,您最终在 PHP 中使用单例的方式与您完全不同会在 java.
这样的系统中
希望对您有所帮助,祝您好运!
您不能在两个不同的请求之间共享连接。 PHP 脚本被解释,然后当它到达文件末尾时,返回响应并释放资源(包括指向数据库连接的指针)。
我正在开发基于 Laravel 5 的 Web 应用程序,我有一个 class "Connection" 作为单例实现的
<?php
class Connection{
private static $instance = NULL;
private static $connection = NULL;
private function __construct(){
self::connection=API::openConnection(); //just an example of connection (from other class)
}
public function getInstance(){
if(NULL==self::$instance)
{
self::$instance=new Connection;
}
return self::$instance;
}
现在我面临的问题是,每当连接获取实例并首次实例化它并打开连接时,但是当其他用户访问同一页面(较早的用户访问过)时,连接将重新打开(即 class 再次实例化),openConnection() 一次只能提供一个连接,当新用户打开连接时,前一个关闭。
有什么解决方案可以让我对多个用户请求使用单一连接吗?
注意:- 以上代码只是对实际问题的抽象,以获得一个想法。
感谢您的帮助。
如果我没看错您的问题,您是在询问是否可以根据一个请求打开一个连接,然后让访问该页面的其他用户使用该连接而无需重新打开它。
从纯粹的 PHP 层面上,您的问题的答案是否定的。 PHP 被设计成一个无状态的系统。进入系统的每个请求都会强制程序建立其状态,然后该状态会在每次连接结束时丢失。这符合当时所有模仿 HTTP 的系统设计风格。您所描述的模式在桌面或服务器计算编程环境中更为常见,在这些环境中,应用程序驻留在内存中。
您将在 PHP 中找到的是启用您正在谈论的那种持久连接的第三方库。例如,oracle 驱动程序 (oci8
) 有一个 connect function , and a pconnect function。后者实现了持久连接。这些库可以做到这一点,因为它们是在 C/C++ 中实现的——即,不是纯粹的 PHP。此外,每个图书馆对于 "persistent" 的含义都有自己的规则。
当您在 PHP 中实现单例时,您得到的对象将始终是该单例对象 仅针对该请求 。它与 java 中的单例概念相似,但由于 PHP 的 运行 时间模型大不相同,您最终在 PHP 中使用单例的方式与您完全不同会在 java.
这样的系统中希望对您有所帮助,祝您好运!
您不能在两个不同的请求之间共享连接。 PHP 脚本被解释,然后当它到达文件末尾时,返回响应并释放资源(包括指向数据库连接的指针)。