标签:
1、抽象类(abstract class)
抽象类不能直接被实例化,必须先继承该抽象类,然后再实例化子类。抽象类中至少要包含一个抽象方法。如果类方法被声明为抽象的,那么其中就不能包括具体功能的实现。继承一个抽象类的时候子类中必须包含抽象类中的所有抽象方法,并且这些方法必须和抽象类中的方法一样或者更宽松,例如抽象类中的抽象方法为protected,那么子类中的方法必须为protected或者public,不能为private。例如:
//定义抽象类 abstract class AbstractClass{ //定义子类中必须包括的方法,而且更宽松 abstract protected function getValue(); abstract protected function prefixValue($prefix); //普通方法 public function printOut(){ return $this->getValue(); } } //子类 继承抽象类 class ConcreteClass1 extends AbstractClass{ protected function getValue(){ return "ConcreteClass1"; } public function prefixValue($prefix){ return $prefix."ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass{ public function getValue(){ return "ConcreteClass2"; } public function prefixValue($prefix){ return $prefix."ConcreteClass2"; } public function aa(){ return "aa"; } } $class1 = new ConcreteClass1(); echo $class1->printOut().‘<br />‘; echo $class1->prefixValue(‘Foo‘).‘<br />‘; $class2 = new ConcreteClass2(); echo $class2->printOut().‘<br />‘; echo $class2->getValue().‘<br />‘; echo $class2->prefixValue(‘Bar‘).‘<br />‘; echo $class2->aa();
2、接口(interface)
使用接口(interface),你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
我们可以通过interface定义一个接口,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法必须都是public,这是接口的特性。
接口的实现使用implements
interface iTemplate{ public function setVariable(); public function getHtml(); } class Template implements iTemplate{ public function setVariable(){ return ‘getVariable‘; } public function getHtml(){ return "getHtml"; } public function aa(){ return ‘aa‘; } } $template = new Template(); echo $template->setVariable(); echo $template->getHtml(); echo $template->aa();
3、接口(interface)与抽象类(abstract)的区别
抽象类可以有属性、抽象方法、和普通方法;而接口不可以有普通方法和属性,只可以有常量和抽象方法(无方法体);
语法上的区别
标签:
原文地址:http://www.cnblogs.com/longfeiPHP/p/4988879.html