1 PHP抽象类与接口的区别
说实话平时如果不是自己要去设计一套系统这个用得还是比较少,这里整理一下两者的区别
1.1抽象类可以有自己的成员变量,接口不行,接口仅能定义一些简单常量
1.2一个类可以继承(严格来说是实现不是继承)多个接口,继承关键字(implements),但是一个类只能继承一个抽象类,继承关键字(extends)
1.3一个类如果继承了一个接口,那么它必须实现接口里面的所有方法,一个类如果继承了一个抽象类,那么它必须实现抽象类里面所有的抽象方法
1.4抽象类可以有不同的修饰方法,比如(private,protected),但接口所有的方法都默认是public,不能自行修改
1.5抽象类可以有构造函数,但接口不行
1.6两者相同点在于抽象类的抽象方法和接口类的方法不能写任何内容,包括后面的花括号(‘{}’);所有的方法都在子类去实现
//创建一个抽象类Test1
abstract class Test1{
public $a='';
public function xiaoming(){
echo 'xiaoming';
}
abstract function xiaowang();
}
//创建一个类Test2去继承Test1
class Test2 extends Test1{
public function index(){
echo 'index';
}
}
$obj=new Test2();
$obj->index();
此时调用Test2的index方法会报错:Fatal error: Class Test2 contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Test1::xiaowang)
原因是我在继承了抽象类但没有去实现它的抽象方法,此时我们去把抽象方法加上,可以不用写内容,像这样:
class Test2 extends Test1{
function xiaowang()
{
// TODO: Implement xiaowang() method.
}
public function index(){
echo 'index';
}
}
这时调用Test2的index方法正常输出:index
下面看下接口类,新建一个接口类:
interface Test3{
const CESHI='aa';
function xiaowang();
}
同样我们Test2去实现了接口类里面的xiaowang这个方法:
class Test2 implements Test3{
function xiaowang()
{
// TODO: Implement xiaowang() method.
}
public function index(){
echo 'index_'.Test3::CESHI;
}
}
$obj=new Test2();
$obj->index();
此时程序输出:index_aa;
至于其他更深入的东西就不在这探讨了
2 mysql having的使用
having是在对数据分组后再对数据进行筛选,作用类似where,但是where只能在分组查询之前使用,分组后就得用having来操作了,举例:
一个学生表student:
字段分别为id,name,class(班级),age(年龄),查出学生年龄满18且人数大于20人的班级
SELECT count(*) as num,class from student where age>=18 GROUP BY class HAVING num>20
3 ajax实现同步
这个问题说实话我当时以为很难,因为平时很少有需求让ajax同步操作,结果后来看了下文档,就一个参数的问题,AJAX 指的是异步 JavaScript 和 XML(Asynchronous JavaScript and XML),而设置同步或异步只需要设置一个参数,async:true(异步)或 false(同步);JQuery的ajax()方法默认这个参数为true,如果需要同步,则需要设置这个参数为false
$.ajax({url:"index.php",async:false});
待更新....