一步一步学习PHP(6) 面向对象


Posted in PHP onFebruary 16, 2010

但是我们知道,面向对象有三大特征:继承,多态和封装。

1. 继承

我们继续上一节中的例子,在PHP中,继承和Java是一样的,都使用extends关键字。

class People 
{ 
private $name; 
public function GetName() 
{ 
return $this->name; 
} 
public function SetName($name) 
{ 
$this->name=$name; 
} 
} 
class Student extends People 
{ 
private $grade; 
public function SayHello() 
{ 
echo("Good Morning,".parent::GetName()); 
} 
}

在这里,我们需要主要的还有我们访问父类在C# 中用base,在Java中用super,但是在PHP中,我们用parent关键字。

如果我们要访问自身的方法,那么可以用this,也可以用self。

class Student extends People 
{ 
public function GetName() 
{ 
return "kym"; 
} 
private $grade; 
public function SayHello() 
{ 
echo("Good Morning,".self::GetName()); 
//echo("Good Morning,".$this->GetName()); 
} 
}

2. 抽象类

提到继承,就不得不说抽象类。

<?php 
abstract class People 
{ 
private $name; 
public function GetName() 
{ 
return $this->name; 
} 
public function SetName($name) 
{ 
$this->name=$name; 
} 
abstract function SayHello(); 
} 
class Student extends People 
{ 
public function SayHello() 
{ 
echo("Good Morning,".parent::GetName()); 
} 
} 
$s=new Student(); 
$s->SetName("kym"); 
$s->SayHello(); 
?>

3. 接口

接下来就是接口:

<?php 
abstract class People 
{ 
private $name; 
public function GetName() 
{ 
return $this->name; 
} 
public function SetName($name) 
{ 
$this->name=$name; 
} 
abstract function SayHello(); 
} 
interface IRun 
{ 
function Run(); 
} 
class Student extends People implements IRun 
{ 
public function SayHello() 
{ 
echo("Good Morning,".parent::GetName()); 
} 
public function Run() 
{ 
echo("两条腿跑"); 
} 
} 
$s=new Student(); 
$s->SetName("kym"); 
$s->SayHello(); 
$s->Run(); 
?>

都没什么好说的,跟Java一模一样。

4. 构造方法

一直忘了说构造方法,其实也就是一段同样的代码:

<?php 
class Person 
{ 
private $name; 
private $age; 
public function Person($name,$age) 
{ 
$this->name=$name; 
$this->age=$age; 
} 
public function SayHello() 
{ 
echo("Hello,My name is ".$this->name.".I'm ".$this->age); 
} 
} 
$p=new Person("kym",22); 
$p->SayHello(); 
?>

我们在面试中也许经常会遇到一种变态的题型,就是若干个类之间的关系,然后构造函数呀什么的调来调去。但是,在PHP中就不会遇到这样的情况了,因为在PHP中并不支持构造函数链,也就是说,在你初始化子类的时候,他不会自动去调用父类的构造方法。
<?php 
class Person 
{ 
private $name; 
private $age; 
public function Person($name,$age) 
{ 
$this->name=$name; 
$this->age=$age; 
} 
public function SayHello() 
{ 
echo("Hello,My name is ".$this->name.".I'm ".$this->age); 
} 
} 
class Student extends Person 
{ 
private $score; 
public function Student($name,$age,$score) 
{ 
$this->Person($name,$age); 
$this->score=$score; 
} 
public function Introduce() 
{ 
parent::SayHello(); 
echo(".In this exam,I got ".$this->score); 
} 
} $s=new Student("kym",22,120); 
$s->Introduce(); 
?>

5. 析构函数

析构函数和C#和C++中不同,在PHP中,析构函数的名称是__destructor()。

class Student extends Person 
{ 
private $score; 
public function Student($name,$age,$score) 
{ 
$this->Person($name,$age); 
$this->score=$score; 
} 
public function Introduce() 
{ 
parent::SayHello(); 
echo(".In this exam,I got ".$this->score); 
} 
function __destruct() 
{ 
echo("我要被卸载了"); 
} 
}

6. 多态

由于默认参数的存在,以及PHP的弱类型,使得编译时多态(也就是由于参数个数以及类型不同而造成的多态)无法实现,但是运行时多态在上文中已有提及。不再赘述。

PHP 相关文章推荐
用PHP读注册表
Oct 09 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
Yii基于数组和对象的Model查询技巧实例详解
Dec 28 PHP
关于PHP中Session文件过多的问题及session文件保存位置
Mar 17 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
理解php依赖注入和控制反转
May 11 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
Jun 13 PHP
PHP实现的激活用户注册验证邮箱功能示例
Jun 06 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
Apr 11 PHP
thinkphp5.1框架容器与依赖注入实例分析
Jul 23 PHP
一步一步学习PHP(5) 类和对象
Feb 16 #PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 #PHP
IP138 IP地址查询小偷实现代码
Feb 15 #PHP
PHP采集相关教程之一 CURL函数库
Feb 15 #PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 #PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 #PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 #PHP
You might like
php 伪静态之IIS篇
2014/06/02 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
js实现车辆管理系统
2020/08/26 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
Python实现二分查找算法实例
2015/05/26 Python
Python的Twisted框架上手前所必须了解的异步编程思想
2016/05/25 Python
Python pass详细介绍及实例代码
2016/11/24 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
python如何将图片转换素描画
2020/09/08 Python
thinkphp5 路由分发原理
2021/03/18 PHP
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
大学生毕业自我鉴定范文
2013/09/19 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
赔偿协议书范本
2014/04/15 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
电影建党伟业观后感
2015/06/01 职场文书
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript