首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建一个只初始化一次且供所有用户使用的PHP类

如何创建一个只初始化一次且供所有用户使用的PHP类
EN

Stack Overflow用户
提问于 2015-03-18 13:46:38
回答 3查看 385关注 0票数 1

我编写了一个处理socket_create和socket_connect的类,并返回套接字的文件描述符。我想知道如何使这个文件描述符始终可用。

在这个类被实例化之后,所有会话都使用相同的实例(套接字的文件描述符)来发送和接收数据。此套接字连接不会自动关闭。

例如,

代码语言:javascript
运行
复制
/*socket_class.php*/
class socket_class {
    private $socket;

    public function getSocket() {
        /*do socket_create and socket_connect*/
        return this->$socket;
    }
}

$socket_instance = new socket_class();

/*socket_user.php*/
require_once("socket_class.php");
$socket_file_descriptor = $socket_instance->getSocket();
/*Send and Recv data*/

我只希望所有的会话都使用相同的$socket_instance。

EN

回答 3

Stack Overflow用户

发布于 2015-03-18 13:50:04

您需要将该属性设置为静态的(不需要实例化即可保存值)。

代码语言:javascript
运行
复制
class socket_class {
    private static $socket;

    public function getSocket() {
        /*do socket_create and socket_connect*/
        return self::$socket;
    }
}

请注意,根据上面的代码,您需要使用self伪变量,而不是$this

票数 0
EN

Stack Overflow用户

发布于 2015-03-18 13:59:15

当web用户在apache上打开php页面时,每次调用都会启动一个独立于其他用户的单独进程。这意味着基于浏览器的调用将单独运行,每个会话创建自己的类实例。

要绕过这个问题,你需要运行一个‘php daemon’,一个在服务器端持续运行的进程。

link给出了创建基于套接字的守护进程的示例过程。这个守护进程将独立于您的其他代码在同一服务器上的不同端口上运行。

从运行在apache (端口80)上的主网站上,您可以通过以下url从javascript、html等调用此守护进程。

代码语言:javascript
运行
复制
http://yoursite.com:6789/

其中6789是您在套接字服务器中使用的端口

票数 0
EN

Stack Overflow用户

发布于 2015-03-18 13:59:59

代码语言:javascript
运行
复制
<?php
class socket_class {
	private static $socket;
	public function getSocket() {
		return self::$socket;
	}
}
$obj_socket = new socket_class();
$obj_socket->getSocket();
?>

在您的代码中,公共函数getSocket() return this-> $socket;将替换为return self::$socket;,因为$socket是一个静态变量,所以不能使用$this调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29114935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档