一步一步学习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 相关文章推荐
桌面中心(三)修改数据库
Oct 09 PHP
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
Aug 26 PHP
解决ajax+php中文乱码的方法详解
Jun 09 PHP
PHP中iconv函数转码时截断字符问题的解决方法
Jan 21 PHP
PHP5多态性与动态绑定介绍
Apr 03 PHP
详解PHP实现执行定时任务
Dec 21 PHP
php连接mysql数据库
Mar 21 PHP
PHP后端银联支付及退款实例代码
Jun 23 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
Oct 08 PHP
php将xml转化对象的实例详解
Nov 17 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
常用星际术语索引(新手指南)
2020/03/04 星际争霸
PHP实现linux命令tail -f
2016/02/22 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
淘宝中秋节活动方案
2014/01/31 职场文书
运动会入场词60字
2014/02/15 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
演讲稿开场白台词
2014/08/25 职场文书
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
Python之matplotlib绘制折线图
2022/04/13 Python