zl程序教程

您现在的位置是:首页 >  后端

当前栏目

php 中 public private protected的区别

PHP 区别 public Private protected
2023-09-27 14:24:29 时间

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

私有方法不可调用。