php的public、protected、private三种访问控制模式的区别

public: 公有类型

在子类中可以通过self::var调用public方法或属性,parent::method调用父类方法

    在实例中可以能过$obj->var 来调用 public类型的方法或属性

protected: 受保护类型
        在子类中可以通过self::var调用protected方法或属性,parent::method调用父类方法

在实例中不能通过$obj->var 来调用  protected类型的方法或属性

private: 私有类型
 该类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法

2.self 和 parent 的区别
  a).在子类中常用到这两个对像。他们的主要区别在于self可以调用父类中的公有或受保护的属性,但parent不可以调用

b).self:: 它表示当前类的静态成员(方法和属性) 与 $this 不同,$this是指当前对像

附代码:

<?php
/**
 * parent 只能调用父类中的公有或受保护的方法,不能调用父类中的属性
 * self  可以调用父类中除私有类型的方法和属性外的所有数据
 */
class User{
    public $name;
    private $passwd;
    protected $email;    
    public  function __construct(){
        //print __CLASS__." ";
        $this->name= ‘simple‘;
        $this->passwd=‘123456‘;
        $this->email = ‘[email protected]‘;
    }    
    public function show(){
        print "good ";
    }    
    public function inUserClassPublic() {
        print __CLASS__.‘::‘.__FUNCTION__." ";
    }    
    protected  function inUserClassProtected(){
        print __CLASS__.‘::‘.__FUNCTION__." ";
    }    
    private function inUserClassPrivate(){
        print __CLASS__.‘::‘.__FUNCTION__." ";
    }
}

class simpleUser extends User {    
    public function __construct(){        
        //print __CLASS__." ";
        parent::__construct();
    }
    
    public function show(){
        print $this->name."//public ";        
        print $this->passwd."//private ";
        print $this->email."//protected ";
    }
    
    public function inSimpleUserClassPublic() {
        print __CLASS__.‘::‘.__FUNCTION__." ";
    }
    
    protected function inSimpleUserClassProtected(){
        print __CLASS__.‘::‘.__FUNCTION__." ";
    }
    
    private function inSimpleUserClassPrivate() {
        print __CLASS__.‘::‘.__FUNCTION__." ";
    }
}

class adminUser extends simpleUser {
    protected $admin_user;
    public function __construct(){
        //print __CLASS__." ";
        parent::__construct();
    }
    
    public function inAdminUserClassPublic(){
        print __CLASS__.‘::‘.__FUNCTION__." ";
    }
    
    protected function inAdminUserClassProtected(){
        print __CLASS__.‘::‘.__FUNCTION__." ";
    }
    
    private function inAdminUserClassPrivate(){
        print __CLASS__.‘::‘.__FUNCTION__." ";
    }
}

class administrator extends adminUser {
    public function __construct(){        
        parent::__construct();
    }
}

/**
 * 在类的实例中 只有公有属性和方法才可以通过实例化来调用
 */
$s = new administrator();
print ‘-------------------‘;
$s->show();
?>

时间: 2024-12-17 09:46:02

php的public、protected、private三种访问控制模式的区别的相关文章

php的public、protected、private三种访问控制模式的区别 self,parent

php的public.protected.private三种访问控制模式的区别 public: 公有类型 在子类中可以通过self::var调用public方法或属性,parent::method调用父类方法 在实例中可以能过$obj->var 来调用 public类型的方法或属性 protected: 受保护类型        在子类中可以通过self::var调用protected方法或属性,parent::method调用父类方法 在实例中不能通过$obj->var 来调用  prote

[转]php的public、protected、private三种访问控制模式的区别

FROM : http://blog.163.com/weiwenjuan_bj/blog/static/14035033620129304183850/?suggestedreading public: 公有类型 在子类中可以通过self::var调用public方法或属性,parent::method调用父类方法 在实例中可以能过$obj->var 来调用 public类型的方法或属性 protected: 受保护类型        在子类中可以通过self::var调用protected方

php中的public、protected、private三种访问控制模式及self和parent的区别(转)

php的public.protected.private三种访问控制模式的区别 public: 公有类型 在子类中可以通过self::var调用public方法或属性,parent::method调用父类方法 在实例中可以能过$obj->var 来调用 public类型的方法或属性 protected: 受保护类型 在子类中可以通过self::var调用protected方法或属性,parent::method调用父类方法 在实例中不能通过$obj->var 来调用 protected类型的方

关于虚拟机里面三种网络模式的区别

最近在面试的时候被人问到虚拟机中的网络模式的区别.当时没有回答清楚,之后查了一下资料,总结了一下. 一.虚拟机中网络模式的分类 首先,在我们打开虚拟机后,打开设置选项,一共有三种网络模式,分别是host-only,桥接以及NAT模式.桥接模式简单来说就是不能上网,也不能和主机连接,因此在实际工作中应用不大.我们重点将介绍另外两种模式. 二.桥接模式,NAT模式的各个工作流程 2.1 桥接模式 桥接模式:简单来说,它就是把你的网卡当成是一个交换机,从而使得你的虚拟机和当前机器的网络是平级的.换句话

作用域public,protected,private,以及不写时的区别?

public:不同包.同一包.类内都可用 private:类内 protected: 不同包的子类.同一包.类内都可用 不写时:同一包内.类内default(friendly) 原文地址:https://www.cnblogs.com/arvins/p/8404574.html

三种工厂模式的区别

简单工厂:依据输入,简单工厂类控制产品线的具体产品. 解释:将需求的变更分割为不同的子类,使得符合OCP.缺点:一个工厂生产不同的东西,工厂本身包含了判断逻辑,仍旧在一定程度上违反OCP. 工厂方法模式:简单工厂的工厂类---->工厂接口+具体工厂的实现解释:将简单工厂方法的判断丢到不同的工厂的具体实现中,而变化的部分抽象为一个工厂接口.实质:推迟到子类去实例化对象. 抽象工厂模式:工厂方法的工厂接口+方法&具体工厂+方法的实现 解释:在工厂方法的单一产品线的基础上加上其他系列的产品线.

LVS三种调度模式的区别

NAT:地址转换 DR: 直接路由 TUN:隧道 NAT: 集群节点跟director必须在同一个IP网络中: RIP通常是私有地址,仅用于各集群节点间的通信: Director位于client和real server之间,并负责处理进出的所有通信: real server必须将网关指向DIP: 支持端口映射: real Server可以使用任意OS: 较大规模应用场景中,director容易成为系统瓶颈: DR: 集群节点跟director必须在同意个物理网络中: RIP可以使用公网地址,实现

VMware Workstation之虚拟网络的三种连接模式浅析

刚开始接触VMware Workstation做实验时常常为选择哪种网络连接模式而苦恼. 有时候老师说选择NAT,有时候建议桥接,还有时会要求仅主机. 唉,真是老师说什么就是什么. 既然不懂那就乖乖跟着老师屁股后面,老师怎么要求我们就怎么做,一点自己发挥的余地都不能有. 机械的跟着老师做了这么多实验,吃了这么多的苦楚,大家有没有想过,我们搭建实验环境为什么要选择不同的网络连接模式,为什么我们实验的其他部署都对了,但就是因为忽略了连接模式这个小差错而导致各种报错,为什么老师一直说实验前的ping通

c++ public protected private 继承

1:访问控制 1.1 public 这类型成员可以被类本身函数访问,也可以被外部创建的类对象调用.子类对象与子类内部可以访问 1.2 protected类型成员,只能被类本身函数访问.外部创建的类对象没有访问权限.子类对象没有访问权限,子类内部可以访问 1.3 private类型成员,只能被类本身函数访问,外部创建的类对象没有访问权限.子类对象和子类内部都没有访问权限 class TestObject{ public: void Function(); void TestPublic(); pr