一步一步学习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 相关文章推荐
一个ftp类(ini.php)
Oct 09 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
收集的二十一个实用便利的PHP函数代码
Apr 22 PHP
PHP学习散记_编码(json_encode 中文不显示)
Nov 10 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
PHP中的日期加减方法示例
Aug 21 PHP
php通过获取头信息判断图片类型的方法
Jun 26 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 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+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)
2014/03/14 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
layer.close()关闭进度条和Iframe窗的方法
2018/08/17 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
python中的对象拷贝示例 python引用传递
2014/01/23 Python
python网页请求urllib2模块简单封装代码
2014/02/07 Python
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
在Django框架中运行Python应用全攻略
2015/07/17 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
信用卡结清证明怎么写
2014/09/13 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
先进个人事迹材料
2014/12/29 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
护士个人总结范文
2015/02/13 职场文书
党员个人总结自评
2015/02/14 职场文书
单身证明范本
2015/06/15 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers
Python中np.random.randint()参数详解及用法实例
2022/09/23 Python