Blogger Information
Blog 55
fans 0
comment 0
visits 30524
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
5月3日作业
老专的博客
Original
532 people have browsed it

5月3日作业

子类 Depa.php 继承父类  Company.php(属性: protected $ceo;)

代码:

  1. Company.php


  2. 实例

    <?php
    
    /**
     * 创建公司类:Company
     */
    class Company
    {
    
        protected $ceo;
        protected $expdepa;
        protected $prodepa;
        
        //构造方法
        public function __construct($ceo,$expdepa,$prodepa){
            $this->ceo = $ceo;
            $this->expdepa = $expdepa;
            $this->prodepa = $prodepa;
        }
        public function dep(){
            return '下达任务';
        }    
    }

    运行实例 »

    点击 "运行实例" 按钮查看在线实例

    2.Depa.php


  3. 实例

    <?php
    
    /**
     * 创建:下属部门: Depa 为 Company 子类
     * 
     * 子类的功能是用来扩展或重载父类的某些功能
     */
    
    class Depa extends Company
    {
        //1.无需任何代码,父类Company中的所有公共和受保护的成员,在当前类中可以直接访问
        
        
        //创建查询器,实现了外部访问
        public function __get($name)
        {
            return $this->$name;
        }
        
        //1.对父类属性进行扩展,增加新的特征,如果不在子类中使用,推荐设置为private
        private $work = false;  //是否有生产车间
        private $web = false; //是否能网上销售
        
        //必须使用构造方法对使用当前新增属性生效
        public function __construct($ceo, $expdepa, $prodepa, $work, $web){
            // $this->ceo = $ceo;
            // $this->expdepa = $expdepa;
            // $this->prodepa = $prodepa;
            
            /**
             * 你可能发现了,这上面的三行属性初始化语句,与父类构造器的语句完全一致
             * 所以,我们完全可以直接调用父类的构造器来简化子类的构造器
             */
            //调用父类构造器初始化类属性
            parent::__construct($ceo, $expdepa, $prodepa);//一行顶三行
            
            $this->work = $work ;
            $this->web = $web;
        }
        
        //2.增加新的方法,扩展父类的功能
        public function task()
        {
            return '接受任务';
        }
        
        //3.将父类方法进行重写,就是功能重载,必须使用与父类一样的方法名:call()
        public function dep()
        {
    //        return '同时还能听歌,看视频';
            //此时,访问call()将会输出子类定义的功能
            //但更多的时候,我们并不会放弃原有功能,而只是在它上面进行追回而已
            //那么,如何在子类中引用父类中的方法呢? 使用关键字: parent,后面跟上双冒号::
            return parent::dep().'/反馈任务。';
        }
           
    }

    运行实例 »

    点击 "运行实例" 按钮查看在线实例

    3.test.php


  4. 实例

    <?php
    
    /* 
     * 类的继承与方法重载
     * 
     */
    
    //使用自动加载器来加载类:(简写版)
    spl_autoload_register(function($className){
        require './class/'.$className.'.php'; 
    });
    
    
    /**
     * 如果才能正常访问这些属性呢?
     * 将父类Company中的相关属性的访问控制全部设置为protected,并在子类Depa中创建查询器
     * 我们采用第二种方案
     */
    //$depa = new Depa($ceo, $expdepa, $prodepa, $work, $web);
    
    $depa = new Depa('kuke','王楠', '李丽丽','运作','销售');
    //下面我们换一组数据来初始化对象,验证parent::__contrunctor()
    //$depa = new Depa('frank','张华', '刘强','生产','外销');
    //此时Depa类中并无这三个属性,可以输出吗?
    echo '总裁: '.$depa->ceo.'<br>'; 
    echo '销售部: '.$depa->expdepa.'<br>'; 
    echo '生产部: '.$depa->prodepa. '<br>';
    //下面输出二个在子类中扩展的属性
    echo '车间:'.$depa->work.'<br>';
    echo '网售:'.$depa->web.'<br>';
    
    echo $depa->dep().'<br>'; //dep()是父类中的方法
    echo $depa->task().'<br>'; //task()是子类中的方法

    运行实例 »

    点击 "运行实例" 按钮查看在线实例

    4.代码运行图片

    51.png


Correction status:qualified

Teacher's comments:
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