Blogger Information
Blog 61
fans 0
comment 0
visits 54325
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
抽象类与应用
笑颜常开的博客
Original
664 people have browsed it

<?php
//echo __DIR__.'<br>';
//include __DIR__.'\Test1.php';
//include __DIR__.'\Test2.php';
//require __DIR__.'\Test3.php';
//php标准函数库中提供了一个自动加载文件的注册函数,可以实现这个功能
//这个函数,在当前脚本引用一个未加载的文件时,会自动调用它的回调方法来加载这个文件
//spl_autoload_register(function ($class){
//    require __DIR__.'/'.$class.'.php';
//});
//$Test1=new Test1;
//$Test2=new Test2;
//$Test3=new Test3;
//echo $Test1->get().'<br>';
//echo $Test2->get().'<br>';
//echo $Test3->get().'<br>';
//抽象类
//class Person1{
//    protected $name;
//    //构造函数,初始化本类中的受保护的成员name
//    public function __construct($name='peter zhu')
//    {
//        $this->name=$name;
//    }
////    外部接口,获取类中成员name
//    public function getName(){
//        return $this->name;
//    }
//    //    外部接口,设置类中成员name
//    public function setName($value){
//        $this->name=$value;
//    }
//}
//$person=new Person1();
//echo '我的姓名是:'.$person->getName().'<br>';
//$person->setName('朱老师');
//echo '我的姓名是:'.$person->getName().'<br>';
//echo '<hr>';

abstract class Person2
{
   protected $name;

   protected function __construct($name='peter zhu')
   {
       $this->name = $name;
   }

   public function getName()
   {
       return $this->name;
   }
//修改器方法.声明为抽象方法,不在本类中实现,而在子类中实现
//抽象类
   abstract public function setName($value);
//    {
//        $this->name = $value;
//    }
}
class Stu extends Person2{
   public function __construct($name = 'peter zhu')
   {
       parent::__construct($name);
   }
   public function setName($value)
   {
       // TODO: Implement setName() method.
       $this->name = $value;
   }
}
//调用构造方法,来设置属性
$stu=new Stu('猪哥');
echo 'php中文网创始人:'.$stu->getName().'<br>';

//调用子类的重写的抽象方法setName(),来设置属性
$stu->setName('灭绝师太');
echo 'php中文网前端讲师:'.$stu->getName().'<br>';
//一.抽象类
//在实际开发中,通常不会直接使用一个父类/超类,而是在父类中定义一些方法声明
//并且确信这个方法肯定是会被子类重写的。父类中没必要实现,只要给一个方法编写规范即可
//这个规范包括方法的名称,参数列表等,具体实现就完全交给子类去实现了
//相当于公司的部门主管,接收到老板的任务,只把属于自己的做了,其他部分,设置一个标准交给下属去完成
//这个老板就是接口,我们一会会讲到,这个部门经理,我们用抽象类实现,而下属就是子类啦,最终干活的就是子类。
//类中只有一个成员设置为抽象类,该类就必须设置抽象类
//一个类一旦设置为抽象类,就具备了两个特点:
//1.不能实例化 2.类中抽象方法,在子类中必须实现
//注意
//1.属性设置为抽象无意义,抽象仅针对方法
//2.子类的成员可见性必须等于或高于所继承的抽象类成员可见性,例如抽象类是protected,子类可以是protected/public
//子类重写的抽象方法可见性,究竟用protected/public,要看这个子类是不是最终被客户端访问到,如果是就public,如果不是就protected
//* `abstract`: 定义抽象方法/抽象类
//* 类中只要有一个抽象方法, 该类就应该声明为抽象类
//* 抽象类只能被继承,不能实例化,并且抽象方法必须在子类实现
//* 实现抽象方法的子类方法可见性不能低于抽象方法原定义
//* 抽象方法是public, 子类方法只能是public
//* 抽象方法是protected, 子类方法只能是protected/public
//
//> 一个抽象类必须被扩展为一个特定的类,我们才能创建类实例,使用类中功能
//二.接口
//'interface':指定某个类必须实现的方法,但不要定义方法的具体实现过程
//接口中仅允许出现:方法与类常量
//接口中的方法可见性必须是:public
//接口的方法体必须是:public
//接口是类的代码模板,可以像雷一样有父子继承关系,例如父接口,子接口
//'implements':类实现接口的关键字
//如果仅是部分实现接口中的方法,请用一个抽象类来实现它
//接口--抽象类-->类--->对象
//总经理-->部门经理-->程序员-->代码

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post