zoukankan      html  css  js  c++  java
  • php面向对象之抽象类

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

    继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;另外,这些方法的可见性 必须和抽象类中一样(或者更为宽松)。如果抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不 能定义为private。

     

    <?php
    abstract class AbstractClass
    {
     // 强制要求子类定义这些方法
        abstract protected function getValue();
        abstract protected function prefixValue($prefix);
    
        // 普通方法(非抽象方法)
        public function printOut() {
            print $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";
        }
    }
    
    $class1 = new ConcreteClass1;
    $class1->printOut();
    echo $class1->prefixValue('FOO_') ."
    ";
    
    $class2 = new ConcreteClass2;
    $class2->printOut();
    echo $class2->prefixValue('FOO_') ."
    ";
    ?> 
    //输出
    ConcreteClass1
    FOO_ConcreteClass1
    ConcreteClass2
    FOO_ConcreteClass2


     
  • 相关阅读:
    spring-redis SortedSet类型成员的过期时间处理
    Redis "MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk"问题
    2015InfoQ软件大会技术记录
    nginx搭建文件服务器
    Electron
    TaoKeeper
    (转)前端:将网站打造成单页面应用SPA
    转(解决GLIBC_2.x找不到的编译问题)
    java编译、编码、语言设置
    Discuz! 论坛
  • 原文地址:https://www.cnblogs.com/yangyi922/p/3625940.html
Copyright © 2011-2022 走看看