Home  >  Article  >  Backend Development  >  PHP singleton mode example analysis

PHP singleton mode example analysis

黄舟
黄舟Original
2017-10-11 09:28:091382browse

Singleton modeAs the name suggests, there is only one instance. As an object creation mode, the singleton mode ensures that a certain class has only one instance, and it instantiates itself and provides this instance to the entire system.

Three key points of the singleton pattern:

 1. A class can only have one instance.

 2. You must create this instance yourself.

3. You must provide this instance to the entire system yourself.

Why use PHP singleton mode?

 1. One major aspect of PHP application is for Regarding the database, there will be a large number of database operations in an application. When developing in an object-oriented way, if you use the singleton mode, you can avoid a large number of resources consumed by new operations and reduce database connections, so that it is less likely to occur. too many connections situation.

2. If a class is needed to globally control certain configuration information in a system, then it can be easily implemented using the singleton mode.

 3. It is easy to debug in a page request, because all the code is concentrated in one class, and hooks can be set in the class to output logs to avoid var_dump(), echo everywhere.

Case:


##

/**
 * 设计模式之单例模式
 * $_instance必须声明为静态的私有变量
 * 构造函数必须声明为私有,防止外部程序new类从而失去单例模式的意义
 * getInstance()方法必须设置为公有的,必须调用此方法以返回实例的一个引用
 * ::操作符只能访问静态变量和静态函数
 * new对象都会消耗内存
 * 使用场景:最常用的地方是数据库连接。
 * 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
 */
class man
{
    //保存例实例在此属性中
    private static $_instance;

    //构造函数声明为private,防止直接创建对象
    private function __construct()
    {
        echo '我被实例化了!';
    }

    //单例方法
    public static function get_instance()
    {
        var_dump(isset(self::$_instance));
        
        if(!isset(self::$_instance))
        {
            self::$_instance=new self();
        }
        return self::$_instance;
    }

    //阻止用户复制对象实例
    private function __clone()
    {
        trigger_error('Clone is not allow' ,E_USER_ERROR);
    }

    function test()
    {
        echo("test");

    }
}

// 这个写法会出错,因为构造方法被声明为private
//$test = new man;

// 下面将得到Example类的单例对象
$test = man::get_instance();
$test = man::get_instance();
$test->test();

// 复制对象将导致一个E_USER_ERROR.
//$test_clone = clone $test;

If there is anything wrong, please correct me.

The above is the detailed content of PHP singleton mode example analysis. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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