【一】.抽象类
假设如下场景:
团队准备开发某网站,表建好了,页面设计好了.A组负责开发底层数据库操作类(DB),B组负责调用DB类.
但是此时A组发生了争执,MySQL? Oracle? DB2? sqlite?到底使用什么数据库?B组.... 进入漫长的等待.
解决方法:
A组和B组 先定1个数据库类的模板,模板中对方法名,参数,返回值,都做严格的规定,此时不管A组选用什么数据库,对于B组来说,没有任何影响。
例如:AB定义一个总的数据库操作类模板
abstract class DB {
abstract public function getRow($sql);
abstract public function getAll($sql);
abstract public function getOne($sql);
abstract public function upDate($sql);
abstract public function Exec($sql);
}
class MySQLdb extends Db {
//重写
}
class SqlLitedb extends Db {
//重写
}
项目中使用其他数据库没有关系,只需要继承DB类,例如mysql操作类继承DB类,sqllite操作类继承DB类.然后对具体的方法进行重写。
在多人开发中,我不需要知道SqlLitedb类或者MySQLdb类内部如何实现,因为他们都是按照严格的DB类来实现,我只需要知道DB类的方法名称,参数,返回值就能随便操作任意数据库,而不需要关心如何实现。
【二】.接口
接口是对功能的抽象,功能各拆成小块,因为它支持多实现,能自由组合成新的物种.
通过对抽象类和接口的了解,我们可以将抽象类理解为类的模板,接口则是方法的模板,接口的粒度更小,用于描述通用的方法
通过经纬度转换为城市名称,并获得城市的编号,通常在全国类型的商城中比较通用。//经纬度转城市名称(返回城市id,城市名称) //$ak开发密钥,$lat纬度,$lng经度,$type返回数据类型 public function getCityName($ak,$lat,$lng)...
if($_SERVER['REQUEST_METHOD'] == 'POST') { echo('This is post '); } elseif ($_SERVER['...
php官方的超全局变量$_SERVER['PHP_SELF']也能直接获取,只不过如果url参数太多也会获取。下面提供一个方法获取/* * 获取当前PHP文件名称 */ if (!function_exists('phpself...
array_merge是最常用的数组合并方法,+号同样也可以,但是却有很大不同。array_merge遇到相同字符串key,后面数组的key会覆盖前面数组的key,+号正好相反。$a = [ 'one' => 'A on...
<?php //php7+ define('CONFIG', [ 'MYSQL' => '127.0.0.1',  ...
众所周知MyISAM引擎不支持事务,但是我只是知道不支持事务,并未测试具体的表现是什么,测试代码如下:try { //开启事务 Db::startTrans(); &...