在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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)的区别 抽象类可以有属性、抽象方法、和普通方法,并且方法的保护类型是向下宽松的,可以有构造方法;而接口不可以有普通方法、构造方法和属性,只可以有常量和抽象方法(无方法体保护类型必须是public); 一个类只可以继承一个抽象方法,但是可以继承多个接口 |
2022-07-18
2022-08-16
2022-11-06
2022-07-29
2022-08-18
请发表评论