最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • php的封装和继承

    正文概述 转载于:掘金(陆小天)   2021-07-23   317

    一、封装

    封装就是有选择性的提供数据 通过访问修饰符来实现封装

    1.1 构造方法

    构造方法也叫构造函数,当实例化对象的时候自动执行。php中构造函数中不允许使用return。使用了也没效果。 语法:

    function __construct() {
    
    }
    

    例:

    <?php
        class Student {
            public function __construct() {
                echo '这是构造方法<br/>';
            }
        }
        
        $stu1 = new Student;
    ?>
    

    效果: php的封装和继承 利用构造方法进行私有变量的赋值访问:

    <?php
        class Student {
            private $name;
            private $sex;
            // 初始化成员变量
            public function __construct($name,$sex) {
                $this->name=$name;
                $this->sex=$sex;
            }
    
            // 显示信息
            public function show() {
                echo "姓名:{$this->name}<br/>";
                echo "性别:{$this->sex}<br/>";
            }
        }
        
        // 实例化
        $stu = new Student('Jack', '男');
        $stu->show();
    
    ?>
    

    效果: php的封装和继承

    1.2 析构方法

    当对象销毁的时候自动调用。(析构方法不能带参数) 语法:

    function __destruct() {
     }
    

    代码:

    <?php
        class Student {
            private $name;
            // 初始化成员变量
            public function __construct($name) {
                $this->name=$name;
                echo "{$name} 生成。<br/>";
            }
    
            // 显示信息
            public function __destruct() {
                echo "{$this->name} 销毁。<br/>";
            }
        }
        
        // 实例化
        $stu = new Student('Jack');
    
    
    ?>
    

    效果: php的封装和继承

    1.3 计算机的内存管理

    计算机内存管理方式: 1、先进先出: 先进先出的内存管理方式一般用在业务逻辑中,比如秒杀、购票等等。

    2、先进后出。 先进后出是计算机的默认内存管理方式

    二、继承

    2.1 继承介绍

    1. 继承使得代码具有层次结构
    2. 子类继承了父类的属性和方法,实现了代码的可重用性
    3. 使用extends关键字实现继承
    4. 父类和子类是相对的

    语法:

    class 子类 extends 父类 {
    }
    

    例题:

    <?php
    // 父类
    class Person {
        public function show () {
            echo '我是人类<br/>';
        }
    }
    
    // 子类
    class Student extends Person {
    
    }
    
    // 测试
    $stu = new Student;
    $stu->show();
    

    效果: php的封装和继承 执行过程:

    1. 在Student类中查找show(),如果找到就调用,找不到就到父类中查找
    2. 在Person类中查询show()

    2.2 子类中调用父类成员

    例:

    <?php
    // 父类
    class Person {
        public function show () {
            echo '我是renlei<br/>';
        }
    }
    
    // 子类
    class Student extends Person {
        public function test () {
            /* 方法一:
            $person = new Person();
            $person->show();
            */
            // 方法二:
            $this->show();
        }
    }
    
    // 测试
    $stu = new Student;
    $stu->test();
    

    效果: php的封装和继承 小结: 1、方法一:通过实例化父类调用父类的成员 2、方法二:通过$this关键字去调用父类的成员

    2.3 访问修饰符protected

    protected: 受保护的,在整个继承链上使用,访问。 例题一:

    <?php
    // 父类
    class Person {
        protected $num=10;
    }
    
    class Student extends Person {
        public function getNum() {
            echo $this->num;
        }
    }
    
    // 测试
    $obj = new Student();
    $obj->getNum();
    

    效果: php的封装和继承 例题二:

    <?php
    // 父类
    class Person {
        public function getNum() {
            echo $this->num;
        }
    }
    
    class Student extends Person {
        protected $num=10;
    }
    
    // 测试
    $obj = new Student();
    $obj->getNum();
    

    效果: php的封装和继承

    2.4 继承中的构造函数

    规则:如果子类有构造函数就调用子类的,如果子类没有就调用父类的构造数。

    通过类名调用父类的构造函数: 类名 __construct()

    例题:

    <?php
    // 父类
    class Person {
        public function __construct() {
            echo '这是父类';
        }
    }
    
    class Student extends Person {
        public function __construct() {
            echo '这是子类';
        }
    }
    
    // 测试
    new Student();
    
    

    效果: php的封装和继承


    例题:

    <?php
    // 父类
    class Person {
        public function __construct() {
            echo '这是父类';
        }
    }
    
    class Student extends Person {
        // public function __construct() {
        //     echo '这是子类';
        // }
    }
    
    // 测试
    new Student();
    
    

    效果: php的封装和继承


    通过类名调用父类的构造函数: 类名 __construct()

    <?php
    // 父类
    class Person {
        public function __construct() {
            echo '这是父类';
        }
    }
    
    class Student extends Person {
        public function __construct() {
            Person::__construct(); // 调用父类的构造函数
            echo '这是子类';
        }
    }
    
    // 测试
    new Student();
    
    

    效果: php的封装和继承


    但是这种耦合性高,我们需要解耦,可以使用parent关键字代表这个子类的父类:

    <?php
    // 父类
    class Person {
        public function __construct() {
            echo '这是父类';
        }
    }
    
    class Student extends Person {
        public function __construct() {
            parent::__construct(); // 调用父类的构造函数
            echo '这是子类';
        }
    }
    
    // 测试
    new Student();
    
    

    效果: php的封装和继承


    例题:给父类传递参数:

    <?php
    // 父类
    class Person {
        protected $name;
        protected $sex;
        public function __construct($name, $sex) {
            $this->name=$name;
            $this->sex=$sex;
        }
    }
    
    class Student extends Person {
        private $score;
        public function __construct($name, $sex, $score) {
            parent::__construct($name, $sex); // 调用父类的构造函数并传递参数
            $this->score=$score;
        }
        public function getInfo() {
            echo "姓名: {$this->name}<br/>";
            echo "性别: {$this->sex}<br/>";
            echo "成绩: {$this->score}<br/>";
        }
    }
    
    // 测试
    $stu = new Student('Jack', '男', 18);
    $stu->getInfo();
    
    

    效果: php的封装和继承

    2.5 多重继承

    PHP不允许多重继承,因为多重继承容易产生二义性。

    2.6 $this详解

    $this表示当前对象的引用。


    起源地下载网 » php的封装和继承

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元