起初,“面向对象”是专指在程序设计中采用封装、继承、抽象等设计方法。可是,这个定义显然不能再适合现在情况。面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及我们经常说的面向对象的编程实现
(OOP,Object Oriented Program)。
面向对象有三大特点:封装、继承、多态。
1、 使用class创建类:
格式:class ClassName{ }
使用new对象实例化:
格式:new ClassName;
2、 对象初始化:
我们在创建一个类有时候需要初始化一些操作,这个时候我们需要使用初始化函数,在PHP5中有两种初始化方法
a.同名法初始化,即建立一个与类名相同的对象方法。
例如:
class MyPc{
function MyPC ( ) {
初始化操作
}}
b.魔术方法名初始化,在对象方法名前加“__”。
例如:
class MyPc{
function __construct() {
初始化操作
}}
3、 继承
利用extends函数进行类的继承(需要注意的是php语言编程只能是单一继承,不能像C#、asp.net、C++那样多继承)。
例如:
Class B extends A{……}
当子类中出现与父类同名的方法,使用该子类时,同名的方法将被重载,覆盖父类同名的方法。
此时如果需要调用父类中同名方法的值,有下面两种方式:
function fun(){
return A::fun().”son”; //”A”为父类名,fun()为同名方法,”son”为子类方法值
}
function fun(){
return Parent::fun().”son”;
}
4、 封装
使用范围 | Public(公共属性) | Protected | Private |
全局 | √ | X | X |
继承 | √ | √ | X |
本类 | √ | √ | √ |
__get()访问封装与__set()设置封装:
例如:利用__get()访问封装
Class A{
Private $a; private $b;
Function __get($n){
Return $this->$n; //此处可返回警告,或无返回值
}}
$d=new A;
$d->a; //此时访问$a会立即触发__get()
例如:利用__set()设置封装
Class A{ //限制$a的赋值范围,若超出则发出警告
Private $a;
Function __set($n,$v){
If($n==”a”&&$v<=3){
$this->$n=$v;
}else echo “超出赋值范围!”;
}}
$d=new A;
$d->a=10; //此时将发出警告
5、 抽象
使用条件:类当中至少有一个抽象方法;
抽象方法后面不需要“{}”;
抽象类和抽象方法前面需加抽象关键字:abstract.
例如:
Abstract class A{
Public $n;
Function fun(){
Echo “end”;}
Abstract function ab();
Abstract function db();
}
抽象类不能实例化,只能被继承;
继承的派生类当中,要把所有的抽象方法重载。
例如:
Class B extend A{
Function ab(){…}
Function db(){…}
}
$b=new B;
$b->db();