在ASP.NET中,如果我声明一个变量(或对象)静态(或者如果我创建一个单例),我可以让它在多个用户的多个会话中保持不变(它在服务器中注册范围)所以我不必在每次请求时初始化它。
PHP中有这样的功能吗?感谢
答案 0 :(得分:6)
您可以设置APC并使用apc_store和apc_fetch函数。
答案 1 :(得分:4)
在PHP中不存在,但是,您可以序列化数据并将其放在硬盘驱动器上的文件中或/ dev / shm /中。您也可以使用memcache。
如果您将数据放入/ dev / shm /或使用内存缓存,数据将在重新启动时消失。
答案 2 :(得分:3)
您可以使用PHP扩展(用C语言编写)来实现。
但是如果你想用PHP编写它,没有。最好的替代方法是在每个请求结束时将变量写入文件(file_put_contents()),并在每个请求开始时打开它(file_get_contents())。
这种替代方案不适用于高容量网站,因为这些流程将同时进行读/写操作,并且全世界将全部使用BLAAA-WOOO-EEE-WOHHH-BOOOM。
答案 3 :(得分:0)
可悲的是,没有。 PHP的static
关键字仅限于当前的脚本实例。
要在同一会话的脚本实例之间保留数据,您可以使用session handling功能。
要在会话中保留数据,您必须使用类似memcache的内容,但这需要在服务器端进行额外的设置工作。
答案 4 :(得分:0)
您可以在会话
中存储对象的序列化副本class test{ private static $instance; public property; private __construct(){} public getInstace(){ if(!self::$instance){ self::$instance = new test; } return self::$instance; } } $p = test->getInstance(); $p->property = "Howdy"; $_SESSION["p"] = $p;
下一页
$p = $_SESSION["p"]; echo $p->property; // "Howdy"
答案 5 :(得分:0)
Symfony和其他框架使用“ PHPFastCache” ,后者支持多种驱动程序来缓存数据,包括APC,SQLite,MongoDB或仅是文件系统。
您可以在https://github.com/PHPSocialNetwork/phpfastcache
上下载它以下是文件缓存的示例:
use Phpfastcache\Helper\Psr16Adapter;
$defaultDriver = 'Files';
$Psr16Adapter = new Psr16Adapter($defaultDriver);
// Setter action
if(!$Psr16Adapter->has('test-key')) {
$data = 'lorem ipsum';
$Psr16Adapter->set('test-key', 'lorem ipsum', 300); // kept in cache for 300 seconds (5 minutes)
}
// Getter action
else {
$data = $Psr16Adapter->get('test-key');
}