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();
    

    私有方法不可调用。

  • 相关阅读:
    js精度溢出解决方案
    Maven的Archetype简介
    maven仓库--私服(Nexus的配置使用)
    maven snapshot和release版本的区别
    jar包版本介绍(beta,alpha,release),软件的版本介绍
    最全的maven的pom.xml文件详解
    私服仓库 nexus 环境搭建(win10)
    EL表达式不解析
    Hibernate框架 主配置文件(Hibernate.cfg.xml)基本
    出现 The processing instruction target matching "[xX][mM][lL]" is not allowed错误
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/10475739.html
Copyright © 2011-2022 走看看