Home > Backend Development > PHP Tutorial > Introduction to php access control

Introduction to php access control

藏色散人
Release: 2023-04-07 19:40:01
forward
2219 people have browsed it

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" # 这么写是错误的。属性必须定义访问控制
}
Copy after login

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");
    }
}
Copy after login

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");
    }
}
Copy after login

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();
Copy after login

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
    }
}
Copy after login

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!

Related labels:
php
source:segmentfault.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template