【PHP语言面向对象入门教程】13.访问类型(public,protected,private)
小标 2018-07-04 来源 : 阅读 670 评论 0

摘要:本文主要向大家介绍了【PHP语言面向对象入门教程】13.访问类型(public,protected,private),通过具体的实例向大家展示,希望对大家学习php语言有所帮助。

本文主要向大家介绍了【PHP语言面向对象入门教程】13.访问类型(public,protected,private),通过具体的实例向大家展示,希望对大家学习php语言有所帮助。

类型的访问修饰符允许开发人员对类成员的访问进行限制,这是PHP5的新特性,但却是OOP语言的一个好的特性。而且大多数OOP语言都已支持此特性。PHP5支持如下3种访问修饰符:

public (公有的、默认的),protected (受保护的)和private (私有的)三种。

public 公有修饰符,类中的成员将没有访问限制,所有的外部成员都可以访问(读和写)这个类成员(包括成员属性和成员方法),在PHP5之前的所有版本中,PHP 中类的成员都是public的,而且在PHP5中如果类的成员没有指定成员访问修饰符,将被视为public 。例:

public $name;

public function say(){ };

   

private 私有修改符,被定义为private的成员,对于同一个类里的所有成员是可见的,即没有访问限制;但对于该类的外部代码是不允许改变甚至读操作,对于该类的子类,也不能访问private修饰的成员。例:

private $var1 = 'A';            // 属性

private function getValue(){ }  // 函数

   

 类内部访问方式为:$this->var1,$this->getValue()

protected保护成员修饰符,被修饰为protected的成员不能被该类的外部代码访问。但是对于该类的子类有访问权限,可以进行属性、方法的读及写操作,该子类的外部代码包括其的子类都不具有访问其属性和方法的权限。

例:

protected $name;

protected function say(){ };

   

【PHP语言面向对象入门教程】13.访问类型(public,protected,private)

属性访问控制示例:

<?php
/**
 * Define MyClass
 */
class MyClass {
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';
 
    function printHello() {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
 
$obj = new MyClass();
echo $obj->public;       // Works
echo $obj->protected;    // Fatal Error
echo $obj->private;      // Fatal Error
$obj->printHello();      // Shows Public, Protected and Private
 
/**
 * Define MyClass2
 */
class MyClass2 extends MyClass {
    // We can redeclare the public and protected method, but not private
    protected $protected = 'Protected2';
 
    function printHello() {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
 
$obj2 = new MyClass2();
echo $obj->public;       // Works
echo $obj2->private; // Undefined
echo $obj2->protected;   // Fatal Error
$obj2->printHello(); // Shows Public, Protected2, not Private
?>

   

方法访问控制示例:

<?php
/**
 * Define MyClass
 */
class MyClass {
    // Contructors must be public
    public function __construct() { }
 
    // Declare a public method
    public function MyPublic() { }
 
    // Declare a protected method
    protected function MyProtected() { }
 
    // Declare a private method
    private function MyPrivate() { }
 
    // This is public
    function Foo() {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate();
    }
}
 
$myclass = new MyClass;
$myclass->MyPublic();        // Works
$myclass->MyProtected(); // Fatal Error
$myclass->MyPrivate();       // Fatal Error
$myclass->Foo();         // Public, Protected and Private work
 
/**
 * Define MyClass2
 */
class MyClass2 extends MyClass {
    // This is public
    function Foo2() {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate();      // Fatal Error
    }
}
 
$myclass2 = new MyClass2;
$myclass2->MyPublic();   // Works
$myclass2->Foo2();       // Public and Protected work, not Private
?>

   

另外在子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。

例如,如果父类方法的访问权限是protected,那么子类中要覆盖的权限就要是protected和public,如果父类的方法是public那么子类中要覆盖的方法只能也是public,总之子类中的方法总是要高于或等于父类被覆盖方法的访问权限。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言PHP频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved