批改状态:合格
老师批语:
单例模式:创建类的唯一实例,不允许多次实例化一个类,例如数据库的连接有最大上限 1000,NEW 一次 PDO 就会多一个类实例,前面的连接如果没释放,就会增加一个,达到最大连接数以后,后面的就不无法再连接数据库了。
将类中的构造方式私有化private, 防止从外部通过 new 实例化这个类; 转为从类的内部将它实例化——>创建一个公共的静态方法,返回当前类的唯一实例
克隆方法私有化,防止克隆当前对象: private function __clone()
<?phpnamespace app;// 单例模式连接数据库 应用程序跟设计库交互use pdo;interface idbBase{// 数据库连接curdstatic function insert($pdo, $data);static function select($pdo, $where = []);static function update($pdo, $username, $password);static function delete($pdo, $username);// 数据库连接static function connect($dsn, $user, $password);}// 单例模式连接数据库abstract Class aDB implements idbBase{private static $_instance;// 将类中的构造方式私有化, 防止从外部通过new实例化这个类private function __construct(){}// 克隆方法私有化,防止克隆当前对象private function __clone(){}static function connect($dsn, $user, $password){// 创建aDB类的唯一实例 获取唯一的pdo对象if (is_null(self::$_instance)) {// echo 2;self::$_instance = new pdo($dsn, $user, $password);}return self::$_instance;}}// 单例模式: 创建类的唯一实例class DB extends aDB{// 数据库连接curdstatic function insert($pdo, $data){/* INSERT INTO `staffs` (`id`, `msnv`, `name`, `hiredate`, `donvi`, `congviec`, `luongtong`, `luongthuc`)VALUES (`id`, `msnv`, `name`, `hiredate`, `donvi`, `congviec`, `luongtong`, `luongthuc`) */$username = $data[0];$password = password_hash($data[1], PASSWORD_DEFAULT);$sql = "INSERT `users` (`username`, `password`) VALUES ($username,'$password');";// echo $sql;return $pdo->query($sql);}// 查询static function select($pdo, $where = ['id' => 1]){foreach ($where as $k => $v) {$sql = $k . ' > ' . $v;}return $pdo->query("SELECT * FROM `users` WHERE " . $sql)->fetchAll(PDO::FETCH_ASSOC);}static function update($pdo, $username, $password){$password = password_hash($password, PASSWORD_DEFAULT);$sql = "UPDATE `users` SET `password` = '$password' WHERE `id`= $username;";// "UPDATE `staffs` SET `donvi` = ? WHERE `id`= ?";return $pdo->query($sql);}static function delete($pdo, $username){// DELETE FROM 表名 WHERE 删除条件$sql = "DELETE FROM `users` WHERE `username`= '$username';";return $pdo->query($sql);}}//客户端代码$config = ['type' => $type ?? 'mysql','host' => $host ?? 'localhost','dbname' => $dbname ?? 'help_10086','username' => $username ?? 'root','password' => $password ?? 'root','port' => $port ?? '3306','charset' => $charset ?? 'utf8'];// extract() 函数从数组中将变量导入到当前的符号表。extract($config);// sprintf() 函数把格式化的字符串写入一个变量中。$dsn = sprintf('%s:host=%s;port=%s;charset=%s;dbname=%s', $type, $host, $port, $charset, $dbname);$pdo = DB::connect($dsn, $username, $password);// var_dump(DB::select($pdo));// $res = DB::insert($pdo,['900118','123456']);// var_dump(DB::update($pdo,'900118','456789'));var_dump(DB::delete($pdo,'900118'));
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号