PHP接口&抽象类验证笔记
2015-11-18 19:53
656 查看
抽象类可以不含抽象方法,抽象类中可以有抽象的方法和非抽象的方法。但是接口中的所有方法必须是抽象的。
但是含抽象方法的类一定是抽象类(或者接口)
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是公开、抽象的。
接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化
抽象类验证:
接口验证:
但是含抽象方法的类一定是抽象类(或者接口)
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是公开、抽象的。
接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化
抽象类验证:
<?php /** * * 抽象类中不一定需要有抽象方法 * 提供一个规范,继承该抽象类的所有的类-- * 都要实现抽象类中定义的方法,以此保证所有的子类都有相似的行为 */ abstract class EventGenerator { private $observers = array(); function addObserver(Observer $observer) { $this->observers[] = $observer; } function notify() { foreach($this->observers as $observer) { $observer->update(); } } abstract protected function Insert();//抽象方法里面不能有方法体 } //子类必须完全实现这个抽象类中所有的抽象方法 class Test extends EventGenerator{ function t(){ return "test"; } //实现父类抽象方法 public function Insert(){ //to do } } $test = new Test(); echo $test->t(); //$obj = new EventGenerator();//不能从抽象类创建对象,它的意义在于被扩展 ?>
接口验证:
<?php /** interface和abstract class的比较及选择参照: 1. interface和abstract class都不能实例化,但可以声明引用变量,abstract class中子类必须对父类的抽象方法进行重写 2. 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。 3. 如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员变量的时候,才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类就仍是抽象类。 */ interface Observer { function update($event_info); function Insert();//接口方法中不能含有方法体 } class Test implements Observer{ public function t(){ return 'test'; } function update($event_info){ return "aaa"; } function Insert(){ //to do } } $test = new Test(); echo $test->t(); //$obj = new Observer();//不能从抽象类创建对象,它的意义在于被扩展 ?>
相关文章推荐
- 空间商关闭fsockopen和pfsockopen函数导致phpcms 无法发送邮件的解决办法
- ***CodeIgnite/CI 去掉 index.php的 配置
- php 正则匹配总览
- PHP如何判断用户浏览器类型与语言
- php laravel5 迁移不成功
- 数组排序(冒泡,比较,插入,快速)
- phpcms v9取消验证码
- PhpStorm配置Xdebug
- PhpStorm配置Xdebug
- 使用ThinkPHP框架快速开发网站(多图)
- ci output
- thinkPHP增删改查的方法案例
- 解决PHP文件(word/excel)下载 内容打开乱码问题
- Thinkphp导入导出excel表
- STP概述
- ThinkPHP redirect 方法
- php 类型转换
- php-fpm的配置和优化
- php 数组 (3) reset() end() count() current() key()
- php使用exec函数导入导出数据库