博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php抽象类和接口
阅读量:2392 次
发布时间:2019-05-10

本文共 2181 字,大约阅读时间需要 7 分钟。

接口

使用接口,你可以指定某个类必须实现那些方法,但是不需要定义这些方法的具体内容,我们可以通过interface来定义一个接口,就像定义标准类一样,但其中定义所有的方法都是空的,接口中定义的所有的方法都必须是public

实现一个接口,可以使用implement操作符,类中必须实现接口中定义的所用的方法,如果实现多个接口,可以用逗号来分割多个接口的名称

注意

  1. 实现多个接口时,接口中的方法不能有重名
  2. 接口也可以继承,通过使用extends操作符
  3. 接口中可以定义常量,接口常量和类常量的使用完全相同,他们都是定值,不能被子类或子接口修改

例子:

//声明接口interface Itemplate{    public function setVariable($name,$var);    public function getHtml($template);}//实现接口class Template implements Itemplate{    private $vars=array();    public function setVariable($name,$var){        $this->vars[$name]=$var;    }    public function getHtml($template){        foreach($this->vars as $names=>$value){            $template=str_replace('{'.$names.'}',$value,$template);        }        return $template;    }}
例子2:

interface a{    public function foo();}interface b{    public function bar();}//继承接口interface c extends a,b{    public function baz();}//实现接口class d implements c{    public function foo(){             }     public function bar(){             }    public function baz(){             }} interface a{    const b="hello";}

抽象类

php5支持抽象类和抽象方法。抽象类不能直接被实例化,必须先继承该抽象类,然后再实例化子类,任何一个类,如果他里面至少有一个方法是被声明为抽象的,那这个类就必须被声明为抽象的,如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现

继承一个抽象类的时候,子类必须实现抽象类中的所有的抽象方法,另外,这些方法的可见性必须和抽象类中一样(或更轻松),如果抽象类中的某个抽象方法被声明为proteected,那么子类中实现的方法应该声明为pritected或者public 

例子:

abstract class AbstractClass{    //抽象方法    abstract protected function getValue();    abstract protected function prefieValue($p);         //普通方法(非抽象方法)    public function printOut(){        print $this->getValue();    }} class ConcreteClass1 extends AbstractClass{    protected function getValue(){        return "ConcreteClass1";    }     public function prefieValue($p){        return "{$p}concreteclass1";    }} class ConcreteClass2 extends AbstractClass{    protected function getValue(){        return "ConcreteClass2";    }     public function prefieValue($p){        return "{$p}concreteclass2";    }} $class1=new ConcreteClass1();$class1->printOut();echo $class1->prefieValue('FOO_');

打印结果:ConcreteClass1

FOO_concreteclass1

2. 调用静态方法的抽象类仍然可行的 类常量不可以的

abstract class Foo{   const a="hello";    static function bar()    {        echo "test\n";    }}Foo::a;//没有输出Foo::bar();//test

转载地址:http://eiqab.baihongyu.com/

你可能感兴趣的文章
poj2871 A Simple Question of Chemistry
查看>>
poj2845 01000001
查看>>
poj1979 Red and Black
查看>>
poj3663 Costume Party
查看>>
poj2773 Happy 2006
查看>>
poj3904 Sky Code
查看>>
zoj 1745 Are We There Yet?
查看>>
poj 1775 && zoj 2358 Sum of Factorials
查看>>
zoj 1577 GCD & LCM
查看>>
zoj2000 Palindrome Numbers
查看>>
UVA100 The 3n + 1 problem
查看>>
hdu1754 I Hate It
查看>>
hdu 1166 敌兵布阵(求区间的和,单节点更新)
查看>>
hiho一下 第四十四周 题目1 : 博弈游戏·Nim游戏
查看>>
poj2299 Ultra-QuickSort(线段树计数问题)
查看>>
poj3264 Balanced Lineup(求区间的最大值与最小值之差)
查看>>
hdu4565 So Easy!(矩阵快速幂)
查看>>
poj2528 Mayor's posters(线段树,离散化)
查看>>
线段树多lazy-tag(两个)
查看>>
hdu4578(三个更新操作,三个求值操作)
查看>>