我正在开发一个基于 Laravel 5 的 Web 应用程序,我有一个作为单例实现的“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;
}
现在我面临的问题是,每当连接首次获取实例并实例化它并打开连接时,但是当其他用户访问同一页面(较早的用户访问过)时,就会重新打开连接(即类再次实例化),openConnection() 一次只能提供一个连接,当新用户打开连接时,前一个连接将关闭。
是否有任何解决方案可以使用单个连接来处理多个用户请求?
注意:- 上面的代码只是对实际问题的抽象,以获得一个想法。
感谢您的帮助。
最佳答案
如果我正确地阅读了您的问题,您是在询问是否可以根据一个请求打开一个连接,然后让访问该页面的其他用户使用该连接而不重新打开它。
从纯粹的 PHP 层面来看,你的问题的答案是否定的。 PHP 被设计为一个无状态系统。进入系统的每个请求都会迫使程序建立其状态,然后该状态会在每次连接结束时丢失。这符合当时的系统设计风格,都是模仿HTTP。您描述的模式在桌面或服务器计算编程环境中更常见,其中应用程序驻留在内存中。
您将在 PHP 中找到第三方库,它们支持您所讨论的持久连接。例如,oracle 驱动程序 (oci8
) 具有 connect function ,以及 pconnect function 。后者实现了持久连接。这些库可以做到这一点,因为它们是用 C/C++ 实现的——即,不是纯 PHP。此外,每个库对于“持久”的含义都有自己的规则。
当您在 PHP 中实现单例时,您得到的对象将始终是仅针对该请求的单例对象。它与 Java 中的单例类似,但由于 PHP 的运行时模型截然不同,因此最终在 PHP 中使用单例的方式与在 Java 等系统中使用单例的方式非常不同。
希望有所帮助,祝你好运!
关于php - 如何在 PHP(Laravel 5) 中为我的站点的所有传入连接保留单个类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29186998/