博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php访问控制简介
阅读量:7080 次
发布时间:2019-06-28

本文共 1547 字,大约阅读时间需要 5 分钟。

1. 属性的访问控制

php中,类的属性必须被定义为公有(public),受保护(protected),私有(private)三个中的一个。PHP4中可以用var关键词定义属性,默认未公有。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。

对var关键词感兴趣的可以看一下

class Foo(){    $name = "hello world" # 这么写是错误的。属性必须定义访问控制}

2. 方法的访问控制

同样,类中的方法也可以被定义为公有(public),受保护(protected),私有(private)三个中的一个。但是如果是公有,方法前的关键词public可以不写。即不写关键次,默认为公有。

例如:

class Bar(){    function hello() # 此时该方法默认为公有    {        print("hello");    }}

那么如果把类中的构造函数私有话了会发生什么?例如:

class Demo(){    private function __construct()    {        print("I'm a private construct function");    }}

很显然,我们就不能直接用new Demo()来创建实例了,因为创建实例的时候会在外部调用__construct()方法。怎么办?我们或许可以在类里写一个静态方法来获取实例对象。这样就即是在本类中调用__construct()方法,也不用在外部实例化,简直完美!

class Demo(){    private function __construct()    {        print("I'm a private construct function");    }        public static function getInstance()    {            return new Demo();#这是Demo类内部,可以用new Demo()实例化调用私有的__construct()方法    }}#在类外面,我们就可以这么玩了Demo::getInstance();

但是话又说回来,我们先把__construct私有化,又千方百计用静态方法获取到实例。这是折腾什么鬼?

其实在在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象。
如果我们需要在全局中只有一个唯一的对象,上面的代码还不够。因为只要有人调用了两次getInstance(),那么就生成了两个了。所以我们再把上面的代码改一下

class Demo(){    private function __construct()    {        print("I'm a private construct function");    }    # 先定义一个空成员装对象    public $_object = null;    public static function getInstance()    {        if(empty(self::$_object))        {                    # 如果没有创建过,那么就new一个            return new Demo();        }        #否则(即以及创建过),我们只要放回已经存在的那个即可        return $_object    }}

参考资料:

转载地址:http://zpvml.baihongyu.com/

你可能感兴趣的文章
Nagios安装配置手册
查看>>
关于接入层交换机启用STP或是Loopback-detection
查看>>
简单理解Ajax原理
查看>>
Delphi XE2 之 FireMonkey 入门(18) - TLang(多语言切换的实现)
查看>>
学用 ASP.Net 之 System.DateTime 结构
查看>>
我的友情链接
查看>>
互联网枭雄点评之周鸿祎 - 不甘老去的互联网老兵
查看>>
PKI_IOS证书加密L2L ×××
查看>>
web基础
查看>>
Apache和Nginx的区别
查看>>
2017.5.23 MS Power BI workshop for partner
查看>>
翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 第 8 章:列表操作...
查看>>
Linux常用的系统监控shell脚本
查看>>
Android Studio中使用GreenDao
查看>>
Yii 框架之采用自带的jquery库实现ajax分页
查看>>
Web前端开发规范
查看>>
day14-磁盘管理df/du/fdisk/parted命令
查看>>
String类的常用方法
查看>>
我的友情链接
查看>>
HttpClient之Http请求步骤
查看>>