理解抽象类最快的方法就是使用场景,最近在看布尔PHP视频中看到这样的讲解非常容易懂,分享出来。
假设如下场景:
团队准备开发某网站,表建好了,页面设计好了.
A组负责开发底层数据库操作类(DB)(多个DB类,操作Mysql类,操作SQLSERVER,SQLlite......).
B级负责调用DB类.
A组发生了争执,MySQL? Oracle? DB2? sqlite?规范是什么?
B组.... 在争执中漫长等待.
能否让B组不等待?
解决:
A组和B组先定1个数据库类的模板:
模板中对 方法名,参数,返回值,都做严格的规定
此时不管A组选用什么数据库,对于B组来说,没有任何影响;
代码如下:(只需要知道抽象类是一种规范,具体实现由子类来做。)
//定义一个抽象类,相当于模板
abstract class DB{
/*
* 连接数据库,从配置文件读取配置信息
*
*/
abstract public function conn();
/*
* 执行参数中的sql语句
*
*/
abstract public function query($sql);
/*
* 获取多行数据
*
*/
abstract public function getAll();
/*
* 获取单条数据
*
*/
abstract public function getOne();
/*
* 自定义创建Sql语句执行 (数据关联数组,表名字,动作,条件)
*
*/
abstract public function Exce($data,$table,$act='insert',$where='0');
/*
* 返回上一条insert语句产生的主键值
*
*/
abstract public function lastId();
/*
* 返回上一条语句影响的行数
*
*/
abstract public function affectRows();
}
//01.使用抽象类先来创建一个Mysql操作类
class Mysql extends DB{
public function __construct(){
}
public function conn(){
}
public function query($sql){
}
public function getAll(){
}
public function getOne(){
}
public function Exce($data,$table,$act='insert',$where='0'){
}
public function lastId(){
}
public function affectRows(){
}
}
//02.使用抽象类先来创建一个Mssql操作类
class Mssql extends DB{
public function __construct(){
}
public function conn(){
}
public function query($sql){
}
public function getAll(){
}
public function getOne(){
}
public function Exce($data,$table,$act='insert',$where='0'){
}
public function lastId(){
}
public function affectRows(){
}
}
上家公司开发医院挂号系统,系统采用GBK编码。ajax发送的中文用户名让PHP保存为cookie出现乱码的解决方案。1.Javascript变量var user=document.getElementById('user').innerText; user=escape(u...
开发com组件可以用c++,vc++,net,我比较熟悉net,演示用dnet(1).创建项目:启动vs2017,新建项目,选择Visual C# ->Windows桌面->类库通用windows(2). 修改Com项目:点击 项目->项目属性,再点击应用程序->程序集信息,...
Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者(publisher),订阅者(subscriber)和频道(channel)。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个...
最近在公司开发一个新的项目假设项目域名是a.com,需要接入b.com的单点登陆系统。(1).首先我们会在a.com的登陆页面用iframe引入b.com来显示登陆界面,实际上登陆验证操作都是在b.com上面(2).当b.com验证通过,会在前端ajax请求a.com的回调地址,这个回调地址目的就是...
php7.1引入了PHP异步信号处理函数pcntl_async_signals() 来处理阻塞问题。在php7之前信号处理方式有2种,第一种是基于ticks来每执行一行代码来触发执行信号监听,第二种是直接while(true){ //监听信号 }第一种方式如果某行的代码阻塞时间较长会影响...
posix_ttyname - 获取当前终端设备名称。<?php var_dump( posix_ttyname(STDOUT) );我们启动一个终端,执行上面的代码输出:/dev/tty1我们再启动一个终端,执行上面的代码输...