【一】.抽象类
假设如下场景:
团队准备开发某网站,表建好了,页面设计好了.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类的方法名称,参数,返回值就能随便操作任意数据库,而不需要关心如何实现。
【二】.接口
接口是对功能的抽象,功能各拆成小块,因为它支持多实现,能自由组合成新的物种.
通过对抽象类和接口的了解,我们可以将抽象类理解为类的模板,接口则是方法的模板,接口的粒度更小,用于描述通用的方法
上家公司开发医院挂号系统,系统采用GBK编码。ajax发送的中文用户名让PHP保存为cookie出现乱码的解决方案。1.Javascript变量var user=document.getElementById('user').innerText; user=escape(u...
if($_SERVER['REQUEST_METHOD'] == 'POST') { echo('This is post '); } elseif ($_SERVER['...
php官方的超全局变量$_SERVER['PHP_SELF']也能直接获取,只不过如果url参数太多也会获取。下面提供一个方法获取/* * 获取当前PHP文件名称 */ if (!function_exists('phpself...
面试中PHP面试官会问调用一个不存在的方法,如何知道是哪个文件哪行调用的?假设方法是getWorkLoad()回答1:开启PHP错误输出,PHP会输出Fatal error: Call to undefined function getWorkLoad() in D:\wwwroot\thinkpa...
ThinkPHP中有一个debug调试功能,能输出报错文件的信息,并能看到这个函数被哪些函数调用,从框架的启动开始记录,特别方便调试。于是研究了下它的底层给予了实现。<?php //--框架核心--Start //框架内置错误处理 function errDealWith($er...
<?php /** * @throws Exception */ function curl() { throw new \Exception('err...