一步一步学习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 fckeditor 调用的函数
Jun 21 PHP
比较时间段一与时间段二是否有交集的php函数
May 31 PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
Jun 24 PHP
PHP set_error_handler()函数使用详解(示例)
Nov 12 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
php视频拍照上传头像功能实现代码分享
Oct 08 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
PHP微信开发之查询城市天气
Jun 23 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
Yii框架核心组件类实例详解
Aug 06 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 curl选项列表(超详细)
2013/07/01 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
php array_map()函数实例用法
2021/03/03 PHP
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
ExpressJS入门实例
2015/01/14 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
python学生信息管理系统(完整版)
2020/04/05 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
易程科技软件测试笔试
2013/03/24 面试题
中专生求职自荐信范文
2013/12/22 职场文书
简历上的自我评价
2014/02/03 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
2015年检验科工作总结
2015/04/27 职场文书
2015公司年度工作总结
2015/05/14 职场文书
2019各种保证书范文
2019/06/24 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python