php5面向对象入门(三)
原文作者 刀客羽朋 ,这里重新整理,出处:http://www.cnblogs.com/tograce/category/161526.html
这一部分主要将学习如下几个内容:
_______________________________
static 变量、方法
final类、final方法和常量
abstract类和abstract方法
设计模式之模版模式
______________________________
3.1 static 变量、方法
语法与说明
① static关键字用来修饰属性、方法,称这些属性、方法为静态属性、静态方法;
② ③④⑤⑥⑦
⑴ static关键字可以用来修饰变量、方法:
⑵ 不经过实例化,就可以直接使用类中的static的属性和static的方法;
⑶ static的属性,在内存中只有一份,为所有的实例共用。
⑷ 使用self::关键字访问当前类的静态成员。
实例:3.1.1 静态属性共用特性
这个实例牵涉到的相关要点是:
⑶ static的属性,在内存中只有一份,为所有的实例共用。
⑷ 使用self::关键字访问当前类的静态成员。
显示结果是:
Now here have 3 user
Now here have 2 user
上面的实例中,设置了一个$count静态属性,程序运行中,多个实例共用同一个静态$count属性
实例:3.1.2 静态属性直接调用
⑵ static的属性,不需要实例化就可以直接使用,在类还没创建时就可以直接使用,
使用方法是 类名::静态属性名
3.1.3 静态方法
●和static的属性一样,static方法不需要所在的类实例化就可以直接使用
●静态方法调用静态方法 调用一个类中的其它静态方法有两种:
1、直接调用 类名::静态方法名
2、 self::静态方法名
记住:self:: 表示当前类的静态成员,与 &this不同,&this 表示当前对象
●静态方法调用静态属性 调用一个类中其它静态属性也有两种:和上面一样。
1、直接调用 类名::静态属性名
2、 self::静态属性名
●静态方法不能调非用静态属性
不能使用self::调用非静态属性
也不能使用 $this获取非静态属性的值
●静态方法调非用静态方法
不能使用$this调用非静态方法
当一个类的非静态方法被self::调用时,系统会自动为这个方法转化为静态方法
______________________________
3.2 final 类、final方法
语法与说明
① final---用于类、方法前;
② final类---不可以被继承;
③ final方法---不可以被覆盖;
实例
3.2.1 final类不能被继承
如果我们希望一个类不能被继承,就用final修饰这个类.
______________________________
3.3 常量
语法与说明
① 用const 定义常量,定义了一个常量后,它不能被更改;
② 用 类名::常量名 来调用常量;
③ 书写规则:常量一般用大写字母,几个单词组成的常量,为方便阅读,这立写 MAX_MUNBER
实例
________________________________________________
3.4 abstract类和abstract方法
语法与说明
① 用abstract 修饰的类表示这个类是一个抽象类, 用abstract 修饰的方法表示这个方法是一个抽象方法;
② 抽象类不能被实例化;
③ 抽象方法只有声明,没有方法的实现内容;
实例
3.4.1 抽象类被子类继承后,其子类可以被实例化
单独设置一个抽象类,是没有意义的,只有有了抽象方法,抽象类才有了血肉。
3.4.2 抽象方法
① 抽象方法只有声明,没有方法的实现内容;
② 抽象方法没有 {},而采用 ; 结束;
③ 在一个类中,只要有一个抽象方法,这个类必须被声明为抽象类;
④ 抽象方法在子类中必须被重写。
3.4.2 抽象类继承抽象类
① 抽象类继承另一个抽象类,不用重写其中的抽象方法;
② 抽象类中,不能重写抽象父类的抽象方法;
//抽象类继承抽象类
abstract class User{
protected $sal;
//定义抽象方法
abstract function getSal();
abstract function setSal($sal);
}
abstract class VipUser extends User {}
?>
________________________________________________
3.5 设计模式——模版模式