Home  >  Article  >  Backend Development  >  Introduction to php access control

Introduction to php access control

藏色散人
藏色散人forward
2019-11-14 14:16:512146browse

Introduction to PHP access control

1. Attribute access control

In PHP, class attributes must be defined as public ( One of three: public, protected, or private. In PHP4, you can use the var keyword to define attributes, which are not public by default. Class members defined as public can be accessed from anywhere. Class members defined as protected can be accessed by itself and its subclasses and parent classes. Class members defined as private can only be accessed by the class in which they are defined.

If you are interested in the var keyword, you can take a look at http://stackoverflow.com/ques...

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

2. Method access control

Similarly, methods in a class can also be defined as one of three: public, protected, or private. But if it is public, the keyword public before the method does not need to be written. That is, if you do not write the key times, the default is public.

For example:

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

So what will happen if the constructor in the class is made private? For example:

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

Obviously, we cannot directly use new Demo() to create an instance, because the __construct() method will be called externally when creating an instance. what to do? We may be able to write a static method in the class to obtain the instance object. In this way, you can call the __construct() method in this class without instantiating it externally, which is perfect!

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();

But then again, we first privatize __construct, and then try our best to obtain the instance using static methods. What the hell is this?

In fact, this method is often used in design patterns to control the creation of objects. For example, the singleton pattern only allows one globally unique object.

If we need to have only one unique object globally, the above code is not enough. Because as long as someone calls getInstance() twice, then two are generated. So let’s change the above code again

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

The above is the detailed content of Introduction to php access control. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete