关于php访问控制的介绍-php教程

资源魔 41 0
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开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!