一步一步学习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中利用XML技术构造远程服务(下)
Oct 09 PHP
php 从数据库提取二进制图片的处理代码
Sep 09 PHP
解析htaccess伪静态的规则
Jun 18 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
PHP URL路由类实例
Nov 12 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
smarty模板引擎之配置文件数据和保留数据
Mar 30 PHP
如何使用Gitblog和Markdown建自己的博客
Jul 31 PHP
PHP页面跳转操作实例分析(header方法)
Sep 28 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 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
桌面中心(二)数据库写入
2006/10/09 PHP
php遍历目录viewDir函数
2009/12/15 PHP
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
PHP开发中四种查询返回结果分析
2011/01/02 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
详解python3中zipfile模块用法
2018/06/18 Python
python爬取内容存入Excel实例
2019/02/20 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
Python爬虫教程知识点总结
2020/10/19 Python
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
开办化妆品公司创业计划书
2013/12/26 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
仲裁协议书
2014/09/26 职场文书
大学迎新生标语
2014/10/06 职场文书
停电放假通知
2015/04/14 职场文书
公司行政管理制度范本
2015/08/05 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js
Python函数中的不定长参数相关知识总结
2021/06/24 Python