<?php
/*
*
单粒模式,只能造出一个对象
1.肯定每次new只能返回一个对象,可以使用静态方法解决
2.子类继承也禁止重写构造方法,添加final搞定
*
*/
//1.普通类的实例,得到2个对象
// class Single{
//
// public $rand;
//
// public function __construct(){
// $this->rand=mt_rand(1000000, 9999999999);
// }
//
// }
//
// var_dump(new Single());
// var_dump(new Single());
//2.单例模式,得到1个对象
class Single{
public $rand;
static $obj;
final protected function __construct(){
$this->rand=mt_rand(1000000, 9999999999);
}
//不使用静态方法就无法new
static function getins(){
//判断是否已经实例化
if(self::$obj==null){
self::$obj=new Single();
}
return self::$obj;
}
}
//测试子类继承,需要实例化子类,只能使用静态方法
class Test extends Single{
}
var_dump(Single::getins());
var_dump(Single::getins());
?>PHP的大多数应用中都会存在大量的数据库操作,如果不用单例模式,那每次都要new操作,但是每次new都会消耗大量的系统资源和内存资源,而且每次打开和关闭数据库都是对数据库的一种极大考验和浪费。所以单例模式经常用在数据库操作类中
【一】.抽象类假设如下场景:团队准备开发某网站,表建好了,页面设计好了.A组负责开发底层数据库操作类(DB),B组负责调用DB类.但是此时A组发生了争执,MySQL? Oracle? DB2? sqlite?到底使用什么数据库?B组.... 进入漫长的等待.解决方法:A组和B组 先定1个数据库类的模...
php arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。(1).创建一个学生类,并且实现arrayaccess 接口。<?php class studen...
Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者(publisher),订阅者(subscriber)和频道(channel)。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个...
经常我们下载国外资源容易被墙,可以通过php脚本获取远程文件流然后输出给我们的浏览器来下载。<?php //设置下载文件的url $url = 'https://mirrors.huaweicloud.com/ubuntukylin/ubuntukylin-19....
elasticsearch的操作都是基于http协议的,已经有现成的php类库,composer安装即可。{ "require": { &...
当我们使用php爬虫采集网站时经常会遇到内容使用ajax异步加载。一般采取的方案是PHP模拟再请求api接口获取数据,但是有时候前端js加密非常麻烦,我们需要将js的加密方法转换为php方法方便curl请求。当然通过了解我们可以通过3种方案解决。第一种:使用phpv8js扩展执行js代码。(pecl...