当前位置:文档之家› PHP面向对象编程应用(基础案例练习)

PHP面向对象编程应用(基础案例练习)


面向对象基本技术
类的创建 对象的使用 构造函数的使用 析构函数的使用
类的创建
使用关键字——class 创建类的语法: class Student { 类成员及方法的定义 }
使用一个关键字class和后面加上一个类名以及加上一对大括号, 这 样一个类的结构就定义出来了,只要在里面写代码就可以了, 但是 里面写什么? 能写什么?怎样写才是一个完整的类呢?
一个类可以实例出多个对象,每个对象都是独立的
对象的使用
对象存储
$p1=new Person();
对于这条代码, $p1是对象名 称在栈内存里面,new Person()真正的对象是在堆内 存里面的
$p1=new Person();等号的左边 $p1是一个引用变量,通过赋 值运算符“=”把对象的首地 址赋给“$p1”这个引用变量, 所以$p1是存储对象首地址的 变量,$p1放在栈内存里边, $p1相当于一个指针指向堆里 面的对象,所以我们可以通 过$p1这个引用变量来操作对 象,通常我们也称对象引用为 对象
类的封装
使用类的访问修饰符来实现封装 PHP5支持如下3种访问修饰符: public (公有的、默认的),private (私有的)和protected (受保护的)三种。 类属性必须定义为公有,受保护,私有之一。如果用 var 定义, 则被视为公有。 public 公有修饰符,类中的成员将没有访问限制,所有的外部 成员都可以访问(读和写)这个类成员(包括成员属性和成员 方法),没有指定成员访问修饰符,将被视为public 。例: public $name; public function say(){ };
类里面的静态方法只能访问类的静态的属性,在类里面的静态方法 是不能访问类的非静态成员。所以伪变量 $this 在静态方法中不可 用。
静态属性不能通过一个类已实例化的对象来访问(但静态方法可以 )。
对象 在现实世界里我们所面对的事情都是对象,如计算机、电视机、 自行车等。
面向对象基础知识
类 是对对象的抽象:也具有属性和方法。 是对对象的分类:具有相同特征与操作的一组对象的描述与定义。
类与对象
面向对象基础知识
面向对象编程的内容:
1. 类:描述一件事物的抽象特点。 2. 对象: 是类的实例。 3. 成员属性:每个对象都可拥有自己形态。如:人衣着、 姓名、性别等称为对象的形态。 4. 成员方法:每个对象都可拥有自己行为:如:人走路、 说话、开车等称为对象的行为;
改成封装的形式: private $name; //把人的姓名使用private关键字进行封装 private $sex; //把人的性别使用private关键字进行封装 private $age; //把人的年龄使用private关键字进行封装
类的继承
通过继承机制,可以利用已有的类型来定义新的数据类 型。所定义的新的数据类型不仅拥有新定义的成员,而 且还同时拥有旧的成员。
<?PHP class Person{
//成员变量定义 var $name; var $age; // 定义成员方法 function say( ) {
$this->name=“王麻子”; $this->age=20; } }
继承与重写:
class Person2 extends Person {
function say( ) { $this->name=“王麻子”; return $this->name }
面向对象基础知识
面向对象编程 三大特征
封装
有效隐藏对象内部细节,实现对象的相对独立性
隐藏内部实现细节,提供外界访问接口
继承
从一个父类派生出另外一个或多个子类
具有父类特征,提供自身扩展
多态
同名方法的功能随对象类型或参数定义不同而有所不同
同种类的不同对象的相同行为的不同结果
}
对象实例化: $p1=new Person2;
$p1->say(); //调用方法 echo "你好,“ . $p1->name; echo "<br/>"; echo "你的年龄:" . $p1->age; ?>
类的静态成员
static关键字使用说明:
声明类属性或方法为 static(静态),就可以不实例化类而直接访问, 即不需要对象调用。
PHP提供了一个对本对象的引用$this, 每个对象里面都有一个 $this来代表这个对象,完成对象内部成员的调用, this的本意就是 “这个”的意思, 上面的实例里面,我们实例化每个对象里面各 自存在一个$this分别代表该对象。
$this就是对象内部代表这个对象的引用,在对象内部和调用本对 象的成员和对象外部调用对象的成员所使用的方式是一样的。
//使用
$zhangshan=new Student("张山"); //创建学生对象 $zhangshan=null; //销毁学生对象 ?>
面向对象高级技术
类的封装 类的继承 类的多态 抽象类及其抽象方法 接口 类的静态成员 对象克隆和串行化
类的封装
封装性是面向对象编程中的三大特性之一,封装性就是把对象的 属 性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部 细节。
在PHP5中,则可以使用析构函数,且其名称是固定 的,即必须为__destruct。
析构函数不能带任何参数。
析构函数的使用
【例】析构函数使用示例
<?PHP
class Student //学生类 { var $xm; //属性 function __construct($xm) //构造函数 { $this->xm=$xm; echo "学生<".$this->xm.">来啦!<BR>"; } function __destruct() //析构函数 { echo "学生<".$this->xm.">走了!<BR>"; } }
类的创建
类的初步形式
class 人{ 成员属性:姓名、年龄、毕业院校、专业 成员方法:会开车,会说英语, 会编程
}
类的创建
类的PHP语法格式
属性:使用var关键字定义。 方法:使用function关键字,类似以前学过的函数
class Person {
// 定义成员属性
var $Name;
使用extends关键字实现继承关系: class B extends A //B类继承A类全部成员
注意:1.类定义前加上final关键字,不能被继承:final class xxx{ }。
2.PHP只能单继承,不支持一个类继承多个类。但是一个类可以进行多层继承(即A 继承于B,而C又继承于A,C通过A间接继承了B)
构造函数的使用
【例】构造函数使用示例
<?PHP //构造函数定义
class Student {
var $Name; function __construct($name) {
$this->Name= $name; echo $this->Name; } function Listen() //自定义方法 { } }
?>
带参数成员方法应用练习:
<?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; } }
//构造函数使用
$zhangshan=new Student("张山");
?>
析构函数的使用
析构函数,一个特殊函数。析构函数允许在销毁一个类之前执行的 一些操作或完成一些功能,比如说关闭文件,释放结果集等,析构 函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时 执行,也就是对象在内存中被销毁前调用析构函数。 在销毁对象时被自动调用。
类的封装
private 私有修改符,被定义为private的成员,对于同一个类里的 所有成员是可见的,即是没有访问限制;但对于该类的外部代码是 不允许改变甚至读操作,对于该类的子类,也不能访问private修 饰的成员。例: private $var1 = ‘A’; //属性 private function getValue(){ } //函数
对象的使用
使用对象的成员,使用一个特殊的操作符“->”来完成对象成员的 访问
访问对象的属性和方法
echo $zhangshan->Name; $zhangshan->Listen();
对象的使用(访问)
特殊的引用“$this” 访问对象中的成员,是通过“对象->成员”的方式访问的,这是在 对象的外部去访问对象中成员的形式,那么如果我想在对象的内 部,让对象内部的方法访问本对象的属性,或是对象中的方法去 调用本对象的其它方法这时我们怎么办?
//实例化对象 $p1=new Person; $p1->setSay("张三",18); //调用方法给 成员属性赋值 $p1->getSay(); //调用方法取成员属 性值
?>
【作业、练习】
编写一个矩形类,可计算矩形的面积?
class 矩形 { //矩形的属性:
相关主题