当前位置:
文档之家› 第十二章 PHP面向对象编程
第十二章 PHP面向对象编程
第十二章 PHP面向对象编程
面向对象基础知识 面向对象基本技能 面向对象高级技能
内容提要
面向对象基础知识
面向对象 在面向对象的程序设计(英语:Object-oriented programming, 缩写:OOP)中,对象是一个由信息及对信息进行处理的描述所 组成的整体,是对现实世界的抽象。简单地说,就是使用软件系 统中的对象来模拟实现现实生活中的事物的方法。
// 定义成员方法
function Drive()
{ } }
对象的使用
对象是类的实例,我们上面说过面向对象程序的单位就是对象,但 对象又是通过类的实例化出来的,既然我们类会声明了,下一步就 是实例化类了。 创建对象,实例化一个类,使用new关键字 $zhangshan=new student(); $lis=new student();
} //调用静态成员方法
面向对象高级技术
类的封装 类的继承 类的多态 抽象类及其抽象方法 接口 类的静态成员 对象克隆和串行化
类的封装
封装性是面向对象编程中的三大特性之一,封装性就是把对象的 属 性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部 细节。
构造函数的使用
构造函数是类中的一个特殊方法。在一个类中只能声明一个构造方 法,在每次创建对象的时候都会去调用一次构造方法,不能主动的 调用这个方法,所以通常用它执行一些有用的初始化任务
构造函数的特点:
构造函数的函数名与其类名相同;(老方式)
初始化任务:属性初始值,创建其它对象等;
在PHP5中,构造函数的名称则是固定的, __construct
PHP提供了一个对本对象的引用$this, 每个对象里面都有一个 $this来代表这个对象,完成对象内部成员的调用, this的本意就是 “这个”的意思, 上面的实例里面,我们实例化每个对象里面各 自存在一个$this分别代表该对象。
$this就是对象内部代表这个对象的引用,在对象内部和调用本对 象的成员和对象外部调用对象的成员所使用的方式是一样的。
protected 保护成员修饰符:被修饰为protected的成员不能被该 类的外部代码访问。但是对于该类的子类、父类有访问权限,可以 进行属性、方法的读及写操作。
类的封装
【例】属性访问控制示例 public $name; //声明人的姓名 public $sex; //声明人的性别 public $age; //声明人的年龄
单例模式
单例模式确保某个类只有一个实例。
例如PHP与数据库连接的场景,在一个应用中会存在大量的数据 库操作,针对数据库句柄连接数据库的行为,使用单例模式可以 避免大量的new操作,因为每一次new操作都会消耗系统和内存资 源。
Class Cls{ //定义静态成员属性用于存储实例化对象,静态属性赋值后不会消失 static $obj = null; //构造方法私有化 private function __construct(){} //定义静态成员方法 static function getObj(){
if(self::$obj == null) self::$obj = new Cls(); return self::$obj; } else{ die(“已经实例化了,不能重复实例化”):
} } public function demo(){
echo ‘’我是单例模式中的一个方法’ ;
面向对象基本技术
类的创建 对象的使用 构造函数的使用 析构函数的使用
类的创建
使用关键字——class 创建类的语法: class Student { 类成员及方法的定义 }
使用一个关键字class和后面加上一个类名以及加上一对大括号, 这 样一个类的结构就定义出来了,只要在里面写代码就可以了, 但是 里面写什么? 能写什么?怎样写才是一个完整的类呢?
一个类可以实例出多个对象,每个对象都是独立的
对象的使用
对象存储
$p1=new Person();
对于这条代码, $p1是对象名 称在栈内存里面,new Person()真正的对象是在堆内 存里面的
$p1=new Person();等号的左边 $p1是一个引用变量,通过赋 值运算符“=”把对象的首地 址赋给“$p1”这个引用变量, 所以$p1是存储对象首地址的 变量,$p1放在栈内存里边, $p1相当于一个指针指向堆里 面的对象,所以我们可以通 过$p1这个引用变量来操作对 象,通常我们也称对象引用为 对象
对象 在现实世界里我们所面对的事情都是对象,如计算机、电视机、 自行车等。
面向对象基础知识
类 是对对象的抽象:也具有属性和方法。 是对对象的分类:具有相同特征与操作的一组对象的描述与定义。
类与对象
面向对象基础知识
面向对象编程的内容:
1. 类:描述一件事物的抽象特点。 2. 对象: 是类的实例。 3. 成员属性:每个对象都可拥有自己形态。如:人衣着、 姓名、性别等称为对象的形态。 4. 成员方法:每个对象都可拥有自己行为:如:人走路、 说话、开车等称为对象的行为;
?>
带参数成员方法应用练习:
<?php Class Person{
//成员变量定义 var $name; var $age; // 定义成员方法 function setSay($xm,$nl) {
$this->name=$xm; $this->age=$nl; } function getSay() { echo $this->name; echo $this->age; } }
类的创建
类的初步形式
class 人{ 成员属性:姓名、年龄、毕业院校、专业 成员方法:会开车,会说英语, 会编程
}
类的创建
类的PHP语法格式
属性:使用var关键字定义。 方法:使用function关键字,类似以前学过的函数
class Person {
// 定义成员属性
var $Name;
//使用
$zhangshan=new Student("张山"); //创建学生对象 $zhangshan=null; //销毁学生对象 ?>
魔术方法
PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。这 些函数不需要显示的调用,而是由某种特定的条件触发。所以在 定义类方法时,除了魔术方法,建议不要以 __ 为前缀。
类的封装
private 私有修改符,被定义为private的成员,对于同一个类里的 所有成员是可见的,即是没有访问限制;但对于该类的外部代码是 不允许改变甚至读操作,对于该类的子类,也不能访问private修 饰的成员。例: private $var1 = ‘A’; //属性 private function getValue(){ } //函数
_construct(), __destruct(), __call(), __callStatic(), __get(), _ _set(), __isset(), __unset(), __sleep(), __wakeup(), __toStrin g(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方 法在 PHP 中被称为魔术方法(Magic methods)。在命名自己的 类方法时不能使用这些方法名,除非是想使用其魔术功能。
改成封装的形式: private $name; //把人的姓名使用private关键字进行封装 private $sex; //把人的性别使用private关键字进行封装 private $age; //把人的年龄使用private关键字进行封装
类的继承
通过继承机制,可以利用已有的类型来定义新的数据类 型。所定义的新的数据类型不仅拥有新定义的成员,而 且还同时拥有旧的成员。
面向对象基础知识
面向对象编程 三大特征
封装
有效隐藏对象内部细节,实现对象的相对独立性
隐藏内部实现细节,提供外界访问接口
继承
从一个父类派生出另外一个或多个子类
具有父类特征,提供自身扩展
多态
同名方法的功能随对象类型或参数定义不同而有所不同
同种类的不同对象的相同行为的不同结果
•应用举例、练习:
类的PHP语法格式:
<?PHP class Person{
//成员变量定义 var $name; var $age; // 定义成员方法 function say( ) {
$this->name=“王麻子”; $this->age=20; } }
Байду номын сангаас
对象实例化:
$p1=new Person; $p1->say(); //调用方法 echo "你好,“ . $p1->name; echo "<br/>"; echo "你的年龄:" . $p1->age;
//实例化对象 $p1=new Person; $p1->setSay("张三",18); //调用方法给 成员属性赋值 $p1->getSay(); //调用方法取成员属 性值
?>
【作业、练习】
编写一个矩形类,可计算矩形的面积?
class 矩形 { //矩形的属性:
矩形的长; 矩形的宽;
//矩形的方法: 矩形的面积; }
对象的使用
使用对象的成员,使用一个特殊的操作符“->”来完成对象成员的 访问
访问对象的属性和方法
echo $zhangshan->Name; $zhangshan->Listen();