zoukankan      html  css  js  c++  java
  • php 中 public private protected的区别

    public 子类,外部都可调用。
    protected 子类可以调用,外部不可以调用。
    private 子类不可以调用,外部不可以调用。

    <?php
    class AA {
        public function a() {
            echo 'aaa';
        }
    
        protected function b() {
            echo 'bbb';
        }
    
        private function c() {
            echo 'ccc';
        }
    }
    
    
    $objAA = new AA();
    $objAA->a();
    $objAA->b(); // 报错
    $objAA->c(); // 报错
    
    <?php
    class AA {
        public function a() {
            echo 'aa1';
        }
    
        protected function b() {
            echo 'bb1';
        }
    
        private function c() {
            echo 'cc1';
        }
    }
    
    
    class BB extends AA{
        public function a() {
            echo 'aa2';
        }
    
        public function b() {
            echo 'bb2';
        }
    
        public function c() {
            echo 'cc2';
        }
    }
    
    $objBB = new BB();
    $objBB->a(); // 正常
    $objBB->b(); // 正常
    $objBB->c(); // 正常
    

    public 可以重写所有的父类方法。

    <?php
    class AA {
        public function a() {
            echo 'aa1';
        }
    
        protected function b() {
            echo 'bb1';
        }
    
        private function c() {
            echo 'cc1';
        }
    }
    
    
    class BB extends AA{
        protected function a() { // 报错
            echo 'aa2';
        }
    
        protected function b() {
            echo 'bb2';
        }
    
        protected function c() {
            echo 'cc2';
        }
    }
    
    $objBB = new BB();
    $objBB->a(); // 报错
    $objBB->b(); // 报错
    $objBB->c(); // 报错
    
    <?php
    class AA {
        public function a() { 
            echo 'aa1';
        }
    
        protected function b() {
            echo 'bb1';
        }
    
        private function c() {
            echo 'cc1';
        }
    }
    
    
    class BB extends AA{
        private function a() { // 报错
            echo 'aa2';
        }
    
        private function b() { // 报错
            echo 'bb2';
        }
    
        private function c() {
            echo 'cc2';
        }
    }
    
    $objBB = new BB();
    $objBB->a(); // 报错
    $objBB->b(); // 报错
    $objBB->c(); // 报错
    

    子类覆盖父类方法,不可以缩小父类的设置。

    <?php
    class AA {
        public function a() {
            echo 'aa1';
        }
    
        protected function b() {
            echo 'bb1';
        }
    
        private function c() {
            echo 'cc1';
        }
    }
    
    
    class BB extends AA{
        public function d() {
            $this->a();
        }
    
        public function e() {
            $this->b();
        }
    
        public function f() {
            $this->c(); // 报错
        }
    }
    
    $objBB = new BB();
    $objBB->d();
    $objBB->e();
    $objBB->f();
    

    私有方法不可调用。

  • 相关阅读:
    vue vant 循环picker模块的实现方法
    Element的表单验证规则,清空或填充数据如何避免自动触发
    递归寻找树结构的子节点
    vue源码解析实例(二)---vue 虚拟DOM篇
    vue源码解析实例(一)
    变化侦测篇---Object.create(null)的定义
    vue源码-变化侦测篇(小知识点)
    Vue源码学习-开篇
    position: sticky轻松做出吸顶功能
    自适应图片高度蒙层 css
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/10475739.html
Copyright © 2011-2022 走看看