面向对象的程序设计思路是现代程序设计由面向过程演变面向对象的必然趋势,所以面向对象的而设计思路必然有它不同的时代意义,必然有着不同面向过程的不同历史使命,而php 5以后成功添加面向对象的设计思路其实是必然的过程。面向对象的设计主要思路就是将程序和数据封装在一个叫对象的基本单位之中来提高重用性,灵活性和可扩展性。他同面向过程和函数式编程的设计思路一样是编程语言的一种范式,是一种规范编程程序的设计方法。只是各自承担着不同的规范职责而已。
对象是基本单位,对象的封装需要类来实现,这才能将对象一个个区别开来。对象和类的共同存在的,对象没有类就像一个家庭没有人一样没有意义,而类没有对象也就像一个孩子没有家一样无法存活。
OOP(Object-Oriented Programming, 面向对象的编程)技术为编程人员敞开了一扇大门,使其编程的代码更简洁、更易于维护,并且具有更强的可重用性。 OOP达到了软件工程的三个目标:重用性、灵活性、扩展性 OOP面向对象编程的特点:封装、继承、多态。
如何抽象一个类
1.类的声明
简单格式:
[修饰符] class 类名{ //使用class关键字加空格后加上类名
[成员属性] //也叫成员变量
[成员方法] //也叫成员函数
}
完整格式:
[修饰符] class 类名 [extends 父类] [implements 接口1[,接口2...]]{
[成员属性] //也叫成员变量
[成员方法] //也叫成员函数
}
2.成员属性
格式:修饰符 $变量名[=默认值]; //如:public $name="zhangsan";
注意:成员属性不可以是带运算符的表达式、变量、方法或函数调用。
public $var3 = 1+2; //错误格式
public $var4 = self::myStaticMethod( ); //错误格式
public $var5 = $myVar; //错误格式
正确定义方式:
public $var6 = 100; //普通数值(4个标量:整数、浮点数、布尔、字串)
public $var6 = myConstant; //常量
public $var7 = self::classConstant; //静态属性
public $var8 = array(true, false); //数组
3.成员方法
成员方法格式:
[修饰符] function 方法名(参数..){
[方法体]
[return 返回值]
}
通过类实例化对象
1.实例化对象
当定义好类后,我们使用new关键字来生成一个对象。
$对象名称 = new 类名称();
$对象名称 = new 类名称([参数列表]);
2.对象中成员的访问
语法:
$引用名 = new 类名(构造参数);
$引用名->成员属性=赋值; //对象属性赋值
echo $引用名->成员属性; //输出对象的属性
$引用名->成员方法(参数);//调用对象的方法
3.特殊对象引用 $this
在类内部引用成员,要用 $this 代表类本身。
构造方法 __construct
大多数类都有一种称为构造函数的特殊方法。当创建一个对象时,它将自动调用构造函数,也就是使用new 这个关键字来实例化对象的时候自动调用构造方法。
构造函数的声明与其它操作的声明一样,只是其名称必须是__construct( )。这是PHP5 中的变化,以前的版本中,构造函数的名称必须与类名相同,这种在PHP5 中仍然可以用,但现在以经很少有人用了,这样做的好处是可以使构造函数独立于类名,当类名发生改变时不需要改相应的构造函数名称了。为了向下兼容,如果一个类中没有名为__construct( )的方法,PHP 将搜索一个php4 中的写法,与类名相同名的构造方法。
构造方法语法格式:
[修饰符] function __construct([参数]){
程序体
}
在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,所以通常用它执行一些有用的初始化任务。比如对成属性在创建对象的时候赋初值。
析构方法 __destruct
与构造函数相对的就是析构函数。析构函数是PHP5 新添加的内容,在PHP4 中没有析构函数。析构函数允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件,释放结果集等,析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行,也就是对象在内存中被销毁前调用析构函数。与构造函数的名称类似,一个类的析构函数名称必须是__destruct( )。析构函数不能带有任何参数。
析构方法方法格式
[修饰符] function __destruct([参数]){
程序体
}
以下是示例
<?php class person{ public $name; public $sex; public $age; public function __construct($name,$sex,$age){ $this->name = $name; $this->sex = $sex; $this->age = $age; } public function say(){ echo 'I am '.$this->name.','.$this->sex.','.$this->age.'<br>'; } public function __destruct(){ echo 'goodbye '.$this->name.'<br>'; } } $p1 = new person('Zhang san','boy','16'); $p2 = new person('Wu min','girl','14'); echo $p1->say(); echo $p2->say(); ?>