PHP继承性:
PHP的继承性是PHP面向对象的三大特性之一,继承使用关键字"extends"。
继承性的好处:
1.父类里面定义的类成员可以不用在子类中重复定义,节约了编程的时间和代价。2.同一个父类的子类有相同的父类定义的类成员,因此在外部代码调用它们的时候可以一视同仁。
3.子类可以修改和调整父类定义的类成员。
PHP方法重载:
在PHP中方法是不能重载的,所谓的方法重载就是定义相同的方法名,通过“参数的个数“不同或“参数的类型“不同,来访问我们的相同方法名的不同方法。
但是因为PHP是弱类型的语言,所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用相同方法名的不同方法也是不成立的。
在前面我们已经说过继承了,继承也就是子类继承了父类的属性和方法,被继承过来的属性和方法是无法被删除的这个时候我们就要用到覆盖。
就是在子类这个方法中可以调用到父类中被覆盖的方法,也就是把被覆盖的方法原有的功能拿过来再加上自己的一点功能,可以通过两种方法实现在子类的方法中调用父类被覆盖的方法:
一种是使用父类的“类名::“来调用父类中被覆盖的方法;
一种是使用“parent::”的方试来调用父类中被覆盖的方法;
PHP的访问权限:
在PHP中访问权限有三种:
1.public 公有的(在父类与子类及外部成员都能进行访问)
2.protected 受保护的(在父类与子类都能进行访问)
3.private 私有的(只能在同一个类中进行访问)
PHP的final关键字的使用:
final关键字只能用来定义类和定义方法,不能使用final这个关键字来定义成员属性。
final只能修饰成员方法或类,不能使用final来修饰成员属性。
注释:类一旦被final关键字修饰后属性与方法是不能被继承或是覆盖。
PHP的static关键字的使用
static关键字是在类中描述成员属性和成员方法是静态的,static成员能够限制外部的访问,因为static的成员是属于类的,是不属于任何对象实例,是在类第一次被加载的时候分配的空间,其他类是无法访问的,只对类的实例共享,能一定程度对类该成员形成保护
注释:静态方法中不能调用非静态的方法和属性;非静态方法可以调用静态方法和属性
在类里面调用静态方法和属性时需要使用关键字self::或是类名(在这里建议使用关键字self::);
在外部调用一个类的静态方法和属性使用类名。
PHP的抽象类与方法:
在定义抽象类与方法都需要使用关键字"abstract";
什么是抽象方法:
在类里面定义没有方法体的方法就是抽象方法
什么是抽象类:
只要在一个类里面有一个抽象方法的就是抽象类。
抽象类怎么使用呢?
最重要的一点就是抽象类不能产生实例对象,所以也不能直接使用,前面多次提到过类不能直接使用,使用的是通过类实例化出来的对象,那么抽象类不能产生实例对象声明抽象类有什么用呢?将抽象方法做为子类重载的模板使用的,定义抽象类就相当于定义了一种规范,这种规范要求子类去遵守,子类继承抽象类之后,把抽象类里面的抽象方法按照子类的需要实现。子类必须把父类中的抽象方法全部都实现,否则子类中还存在抽象方法,那么子类还是抽象类,还是不能实例化类;为什么非要从抽象类中继承呢?因为有的时候要实现一些功能就必须从抽象类中继承,否则这些功能你就实现不了,如果继承了抽象类,就要实现类其中的抽象方法。
PHP的接口:
PHP接口是一个特殊的抽象类同样的是不能进行实例化的
在前面我们声明一个类的时候使用的关键字是“class”,而接口一种特殊的类,使用的关键字是“interface”;
类的定义: class 类名{ … } ,
接口的声明:interface 接口名{ …}
因为接口是一种特殊的抽象类,里面所有的方法都是抽象方法,所以接口也不能产生实例对象; 它也做为一种规范,所有抽象方法需要子类去实现。而定义一接口的子类去实现接口中全部抽象方法使用的关键字是“implements”,而不是前面所说的“extends”;也可以使用抽象类,去实现接口中的部分抽象方法,但要想实例化对象,这个抽象类还要有子类把它所有的抽象方法都实现才行。
我们举个例子:
<?php
// 定义一个接口使用interface关键字,“One”为接口名称
interface One {
// 定义一个常量
const CONSTANT= 'constant value';
// 定义了一个抽象方法”fun1”
public function fun1();
// 定义了抽象方法”fun2”
public function fun2();
}
// 使用”extends”继承另外一个接口
interface Two extends One {
function fun3();
function fun4();
// 使用“implements”这个关键字去实现接口中的抽象方法 接口和类之间
class Three implements One {
function fun1() {
...
}
function fun2() {
...
}
}
// 实现了全部方法,我们去可以使用子类去实例化对象了
$three = new Three();
?>
PHP的串行化与反串行化
简单的来说就是序列化与反序列化
serialize()函数的参数为对象名,返回值为一个字符串,serialize()返回的字符串含义模糊,一般不会解析这个串来得到对象的信息;
unserialize()函数来反串行化对象,这个函数的参数即为serialize()函数的返回值,输出当然是重新组织好的对象。
在PHP5中有两个魔术方法__sleep()方法和__wakeup()方法,在对象串行化的时候,会调用一个__sleep()方法来完成一 些睡前的事情;而在重新醒来,即由二进制串重新组成一个对象的时候,则会自动调用PHP的另一个函数__wakeup(),做一些对象醒来就要做的动作。
__sleep()函数不接受任何参数, 但返回一个数组,其中包含需要串行化的属性。未被包含的属性将在串行化时被忽略,如果没有__sleep()方法,PHP将保存所有属性。
在这里我再介绍几个PHP的魔术常量:
__LINE__:文件中的当前行号
__FILE__:文件的完整路径和文件名
__DIR__:文件所在目录
__FUNCTION__:函数名称
__CLASS__:类的名称
__TRAIT__:Trait的名字
__METHOD__:类的方法名
__NAMESPACE__:当前命名空间的名称