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();
私有方法不可调用。