最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

关于php访问控制的介绍

来源:动视网 责编:小采 时间:2020-11-03 23:10:38
文档

关于php访问控制的介绍

关于php访问控制的介绍:php访问控制的介绍1. 属性的访问控制php中,类的属性必须被定义为公有(public),受保护(protected),私有(private)三个中的一个。PHP4中可以用var关键词定义属性,默认未公有。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自
推荐度:
导读关于php访问控制的介绍:php访问控制的介绍1. 属性的访问控制php中,类的属性必须被定义为公有(public),受保护(protected),私有(private)三个中的一个。PHP4中可以用var关键词定义属性,默认未公有。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自


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
 }
}

文档

关于php访问控制的介绍

关于php访问控制的介绍:php访问控制的介绍1. 属性的访问控制php中,类的属性必须被定义为公有(public),受保护(protected),私有(private)三个中的一个。PHP4中可以用var关键词定义属性,默认未公有。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自
推荐度:
标签: php 简介 访问控制
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top