Blogger Information
Blog 41
fans 2
comment 0
visits 29713
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php之单例模式连接数据库
月光下,遗忘黑暗
Original
928 people have browsed it

代码块

<?php/** * PHP语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存,这和asp.net、Java等编译型是不同的,比如在Java中单例会一直存在于整个应用程序的生命周期里,变量是跨页面级的,真正可以做到这个实例在应用程序生命周期中的唯一性。然而在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了 * */ //PHP单例模式只是针对单次页面级请求时,出现多个应用场景并需要共享同一对象资源时是非常有意义的。/** * 面向对象编程三大特性: * 1. 封装 可见性  php中使用3种类型的可见性 : private(私有), protected(保护),public(公共) * 封装一个程序元素, 把它设为private,仅在本类中可见,还可以把它设为protected,允许本类及其子类访问该属性; 要访问封装的对象, 必须提供公有的可见性. 想要作为一个真正有用的类, 必须至少提供一些方法是可见的(即使只是构造函数) *  *  * 2. 继承 inheritance * 一个类扩展另一个类,前者会拥有后者的所有属性和方法. * php oop具有单继承的特点 -> 带来程序的高耦合性:如果程序通过深层次继承绑定到具体类,即使对父类做简单的修改,也会对子类带来严重的破坏 -> 解决办法: 1. 为了保证类之间的松绑定,通常会继承抽象类,而且是浅继承,即只有一层子类. 2. 引入trait结构 *  *  * 3. 多态 polymorphism  多态只有在oop上下文中讨论才有意义,多态真正价值在于,可以调用有相同接口的对象完成不同的工作.   基于一个公共接口, 在一个给定的程序结构中做出修改或增补时, 可以放心递请求或使用接口方法而不必担心程序会崩溃  一个名字多个实现 *  *  * 接口通常允许开发人员创建松绑定的对象和类,php接口允许储存常量,实现接口的类都可以使用接口中储存的常量 */ //单例模式连接数据库  应用程序与数据库交互 interface iDbBase {    //  数据库操作  curd     static function insert($db);    static function select($db,$where=[]);    static function delete($db,$where=[]);    static function update($db,$data,$where);    static function doConnect($dsn,$username,$password);    // return $this;实现链式调用 } //使用单例模式连接数据库 abstract class aDb implements iDbBase {     //创建类的唯一实例 唯一对象     private static $instance;//保存返回的pdo连接对象     //private关键字 阻止此类在外部进行实例化     private function __construct()     {     }     //private关键字阻止此类在外部进行克隆     private function __clone()     {     }     //只能由类的自身 来进行实例化      static function doConnect($dsn,$username,$password){        //判断$instance是否是aDb类的对象        if(is_null(self::$instance))         {            // echo 'aaaa';            //实例化本类, 传入连接参数,             self::$instance = new PDO($dsn,$username,$password);        }        return self::$instance;    } } //客户端代码// $config = [//     'type'=> $type ?? 'mysql',//     'host'=> $host ?? 'localhost',//     'dbname'=> $dbname ?? 'news',//     'username'=> $username ?? 'root',//     'password'=> $password ?? 'zhoujielun521'// ];// $dsn = sprintf('%s:host=%s;dbname=%s',$config['type'],$config['host'],$config['dbname']);// $username = $config['username'];// $password = $config['password'];// // aDb::doConnect($dsn,$username,$password);// for ($i=0; $i < 10; $i++) { //     aDb::doConnect($dsn,$username,$password);// }//工作类class Db extends aDb{     //  数据库操作  curd      static function insert($db)     {        return $db->query('insert into `admins`(`username`,`password`,`truename`,`gid`,`add_time`) value("asd","fdsa","dsadsas",2,4213) ')->fetchAll(PDO::FETCH_ASSOC);     }     static function select($db,$where=[])     {        return $db->query('SELECT * FROM `iuser` LIMIT 3')->fetchAll(PDO::FETCH_ASSOC);     }     static function delete($db,$where=[])     {     }     static function update($db,$data,$where)     {     }}//客户端代码$config = [    'type'=> $type ?? 'mysql',    'host'=> $host ?? 'localhost',    'dbname'=> $dbname ?? 'video',    'username'=> $username ?? 'root',    'password'=> $password ?? 'root'];$dsn = sprintf('%s:host=%s;dbname=%s',$config['type'],$config['host'],$config['dbname']);$username = $config['username'];$password = $config['password'];//获取pdo连接对象$db = Db::doConnect($dsn,$username,$password);echo '<pre>';print_r(Db::insert($db,));

效果

Correcting teacher:灭绝师太灭绝师太

Correction status:qualified

Teacher's comments:$pdo->query()方法一般用来执行select sql语句, 返回pdoStatement对象(结果集); 对于insert delete update语句, 一般使用$pdo->exec($sql);返回受影响的行数.
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post