我主要的目的:是查看mysqli->lastInsertId 是否是安全的;先上代码:
DB.class.php文件如下:
<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/2/27
 * Time: 8:21
 * 单例模式
 */
class DB
{
    private static $instance;           // 类实例
    private static $db;                 // db object    private static $dbconfig = array(); //数据库配置    public static $lastInsertId = 0;    //最后影响的id    public $result;    /**
     * DB constructor.
     * @param $dbconfig
     */
    private function __construct($dbconfig)
    {
        self::$dbconfig = $dbconfig;
    }    public static function getInstance($dbconfig){
        if (!self::$instance instanceof self){
            self::$instance = new self($dbconfig);
            self::connect();
            self::charset();
        }
        return self::$instance;
    }    private static function connect(){
        try{
            self::$db = new mysqli(self::$dbconfig['host'], self::$dbconfig['username'], self::$dbconfig['password'], self::$dbconfig['database']);
        }catch (Exception $e)
        {
            p($e->getMessage());
        }
    }    private static function charset(){
        self::$db->set_charset('utf8');
    }
    /**
     * @param $sql 先写固定的,测试用
     */
    public function insert(){
        self::$lastInsertId++;
        return true;
    }
    private function __clone()
    {    }
}index.php 文件如下:<?phprequire('config.php');  //数据库配置信息
require('./DB.class.php');$db = DB::getInstance($config);$db->insert();echo (DB::$lastInsertId);sleep(10);  // 延时10秒,为了在另外一个连接访问数据库$db->insert();
echo (DB::$lastInsertId);通过访问index.php , 创建了DB类的实例$db, 我不明白的是,这个类实例应该是在内存的某个地方,变化的可以是对象里面的属性值,那如果在高并发的时候,是否DB::$lastInsertId会出现问题,就是说:第一个用户访问$db->insert(),设置lastInsertId值,然后要使用这个值的时候,是否会是另外一个用户所设置的值呢?
我按照上面的方法测试了几次,都不会出现我说的问题,不知道是我哪里理解错了,还是php服务按客户连接的标识来区分的,
或者在单列模式中,创建的对象只有一个,但对象的属性是每个连接都去创建一份