PHP面向对象--访问修饰符

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29920751/article/details/87707541

PHP中有三种访问修饰符,分别是:

  • public(公有的):在类的外部,类本部和子类中都可以访问
  • private(私有的):只能在类中访问,子类和类的外部都不能访问
  • protected(受保护的):在类本部、子类中可以访问,在类的外部不能访问

它们可以用在类的属性和方法上,用来修饰类成员的访问权限,类的属性和方法统称为类的成员。   

1.public(公有的)

     在PHP5中如果类没有指定成员的访问修饰符,默认就是public的访问权限。

/*
以下两个方法声明访问权限效果相同
*/
function test(){
    #code
};
publilc function test(){
    #code
};
  1. 当类的成员被声明为public的访问修饰符时,该成员能被外部代码访问和操作。

2.private(私有的)

protected $age = '20';  // 受保护的权限

     被定义为private的成员,对于类内部所有成员都可见,没有访问限制。对类外部不允许访问。

3.protected(受保护的)

  被声明为protected的成员,只允许该类的子类进行访问

访问权限

public

protected

private

所有

子类

类内

以下面的例子总结:

<?php
class Student{
    public $name = 'alias'; //公共的访问权限

    protected $age = '20';  // 受保护的权限

    private $money = '8000';    // 私有的访问权限

    // 公有方法
    public function getUserInfo(){

        echo    $this->name;
        echo    $this->age;
        echo    $this->money;
    }

    // 私有方法
    private function getUserMsg(){
        echo "This is test";
    }
}
$student = new Student();
echo $this->name;       // 公共属性可以访问
echo $this->age;        // 受保护属性,报致命错误
echo $this->money;       // 私有属性,找不到属性

$this->getUserMsg();    //可以打印三个属性的信息,因为getUserMsg是公有方法

// 子类继承父类的属性和方法
class Test extends Student{

    // 子类重写父类的public、protected属性的方法,但是不能重新定义private属性的方法
    protected  $age = 25;   // 从新定义年龄
    public function rewriteParent(){
        echo $this->name;
        echo $this->age;
        echo $this->money;      // 私有属性,找不到属性
    }
}
$test = new Test();
echo $this->name;       // 公共属性可以访问
echo $this->age;        // 受保护属性,报致命错误
echo $this->money;      // 私有属性,找不到属性
$test->rewriteParent();     // 显示$name,$age,找不到$money属性;

推荐教程:

PHP 单例设计模式

PHP命名空间

猜你喜欢

转载自blog.csdn.net/qq_29920751/article/details/87707541