一步一步学习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调用mysql存储过程
Feb 14 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
Apr 11 PHP
PHP memcache扩展的三种安装方法
Apr 26 PHP
php 中的4种标记风格介绍
May 10 PHP
php获取$_POST同名参数数组的实现介绍
Jun 30 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
php中substr()函数参数说明及用法实例
Nov 15 PHP
浅谈php7的重大新特性
Oct 23 PHP
Yii安装与使用Excel扩展的方法
Jul 13 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
php对象工厂类完整示例
Aug 09 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
Sep 13 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中用文本文件做数据库的实现方法
2008/03/27 PHP
php中全局变量global的使用演示代码
2011/05/18 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
php头像上传预览实例代码
2017/05/02 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
PHP 裁剪图片
2021/03/09 PHP
对table和ul实现js分页示例分享
2014/02/24 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
8个有意思的JavaScript面试题
2019/07/30 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
如何将python中的List转化成dictionary
2016/08/15 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
船舶工程技术专业求职信
2014/08/07 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
生产操作工岗位职责
2014/09/16 职场文书
工作年限证明模板
2015/06/15 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
关于教师节的广播稿
2015/08/19 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技