文档章节

PHP接口&抽象类验证笔记

风清扬-深圳
 风清扬-深圳
发布于 2015/11/18 19:53
字数 571
阅读 16
收藏 0

抽象类可以不含抽象方法,抽象类中可以有抽象的方法和非抽象的方法。但是接口中的所有方法必须是抽象的。

但是含抽象方法的类一定是抽象类(或者接口)

接口(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();//不能从抽象类创建对象,它的意义在于被扩展
?>



© 著作权归作者所有

共有 人打赏支持
风清扬-深圳
粉丝 11
博文 73
码字总数 19480
作品 0
深圳
高级程序员
私信 提问
Modern PHP 笔记(二):良好实践

相比于上一篇笔记Modern PHP 笔记(一):语言特性,第二部分侧重讲标准和良好实践,更加实战。 第三章:标准 PHP-FIG(PHP Framework Interop Group)2009年 框架的互操作性 通过接口、自动...

郝开心信札
2017/12/01
0
0
PHP 面向对象(OOP) 笔记

1:PHP中类初步接触 复制代码 class Mypc //类名 { public $name; //声明属性,对象名称 function game() //类的方法、动作 { return "玩游戏"; } } [color=#000000]$pc1=new Mypc(); // 创建......

voiphaozi
2011/05/27
0
0
Shiro学习笔记入门--Hello Shiro

Apache Shiro是Apache的一个安全框架.对比Spring Security,可能没有Spring Security功能多,但是在实际并不需要那么重的东西.shiro简小精悍.大多项目绰绰有余.(JBOSS好像也有个什么安全框架....

浮躁的码农
2015/12/01
664
0
TypeScript学习笔记之四类(Class)

一、使用环境 Mac 电脑 WebStorm TypeScript3.x版本 二、类的基本介绍 如果您有其他面向对象语言的经验,那么(Class) 类 就是比较简单的常用的类型,如果你没有经验,那么我开始介绍TypeS...

摸着石头过河_崖边树
2018/12/10
0
0
学习接口Interface的笔记

接口Interface 接口和内部类为我们提供了一种将接口与现实分离的更加结构化的方法。 接口和抽象类很像。但是又有很大区别。 抽象类中的方法可以有方法体(这样就不能是抽象方法),抽象方法需...

StupidZhe
2017/10/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx rails 详细站点配置入门教程

Ruby on Rails 是一个用于开发数据库驱动的网络应用程序的完整框架。Rails基于MVC(模型- 视图- 控制器)设计模式。从视图中的Ajax应用,到控制器中的访问请求和反馈,到封装数据库的模型,R...

xiangyunyan
46分钟前
3
0
Shiro

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

嘿嘿嘿IT
50分钟前
1
0
Flutter 之 Dart语言基础详解 上篇

经过了一个星期的React Native的学习和了解,感觉还是Flutter的优势会更高一些,而且从学习成本来说感觉做安卓的同学学习flutter会相对低一点,门槛会低很多。 当然dart的基础笔者还是从其他...

林-师傅等等我
今天
5
0
Java NIO问题总结

问题1:IO事件在被处理之前,selector.select()方法依然能够返回该事件。即如果在一个线程A中进行selector.select(),而将selector.selectedKeys()中的SelectionKey交由业务线程池去处理,则...

月下狼
今天
5
0
ehcache

简单介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开 源Java分布式缓存。主要面向通用缓存,Java EE和轻量...

大笨象会跳舞吧
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部