如何理解PHP访问控制,有哪些知识点
Admin 2022-11-17 群英技术资讯 832 次浏览
今天小编跟大家讲解下有关“如何理解PHP访问控制,有哪些知识点”的内容 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了相关资料,希望小伙伴们看了有所帮助。php访问控制的介绍
1. 属性的访问控制
php中,类的属性必须被定义为公有(public),受保护(protected),私有(private)三个中的一个。PHP4中可以用var关键词定义属性,默认未公有。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。
对var关键词感兴趣的可以看一下http://stackoverflow.com/ques...
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
}
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Fatal Error:Allowed memory size of xxxxxx bytes exhausted 服务器很多自动任务的php脚本占用服务内存过多,并且程序不在运行了。
laravel 如何实现引入自己的函数或类库?今天小编就为大家解答一下在laravel中引入自己的函数或类库的方法,分享给大家,给大家做个参考,一起过来看看吧
备忘录模式是一种行为型模式,它在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样可以在以后把该对象的状态恢复到之前保存的状态。主...
php之laravel中自定义模板命令:1、创建ToJsServiceProvider;2、ToJs方法主要是对数组的操作;3、声明facade;4、在config数组添加serviceProvider;5、方便调用可以在写helper。
下面由phpstorm教程栏目给大家介绍Phpstorm-限制加载文件,希望对需要的朋友有所帮助!
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008