一步一步学习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
一个可以找出源代码中所有中文的工具
Oct 25 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
Mar 17 PHP
理解PHP中的stdClass类
Apr 18 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
Mar 18 PHP
浅谈PHP中其他类型转化为Bool类型
Mar 28 PHP
如何离线执行php任务
Feb 21 PHP
PHP折半(二分)查找算法实例分析
May 12 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实现统计网站在线人数的方法
2015/05/12 PHP
javascript 播放器 控制
2007/01/22 Javascript
jQuery 性能优化指南 (1)
2009/05/21 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
python实现手机销售管理系统
2019/03/19 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
Python集合操作方法详解
2020/02/09 Python
什么是Python变量作用域
2020/06/03 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
python 实用工具状态机transitions
2020/11/21 Python
一个C/C++编程面试题
2013/11/10 面试题
经济贸易系毕业生求职信
2014/05/31 职场文书
群众路线党员自我评议范文2014
2014/09/24 职场文书
英文版辞职信
2015/02/28 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript
使用feign服务调用添加Header参数
2021/06/23 Java/Android
关于Nginx中虚拟主机的一些冷门知识小结
2022/03/03 Servers
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers