使用静态成员,定义数据库操作类
* 类中的静态成员:静态属性与静态方法
* 作用域: 静态成员属于类所有,必须用类进行调用,不能使用对象调用
* 该类的静态成员,被该类的所有实例对象所共享
* 静态成员的引用: 在类中使用 self::, 在类外部使用 类名::
* 类成员静态化,是面向对象编程的一种趋势,有很多的模拟手段,请格外重视
* 类成中静态化使用关键字:static来实现
* 静态技术的另一个使用场景是: 静态延迟绑定技术,后面我们会详细学习
<?php //使用静态成员,定义数据库操作类 class Db { public static $dbType = 'MySQL'; protected static $db = null; public function __construct($user,$password,$database,$host='localhost',$port=3306) { self::$db = mysqli_connect($host, $user, $password, $database, $port); if (mysqli_connect_errno(self::$db)) { exit('连接失败:'.mysqli_connect_error(self::$db)); } } //获取所有满足条件的记录:这是一个静态方法,该方法中只允许使用静态属性,不允许使用$this //想想这是为什么?对,静态成员属于所有对象,与具体的对象无关,所以不能使用$this伪变量 public static function select($table,$fields='*',$where='',$order='') { $sql = "SELECT {$fields} FROM {$table} {$where} {$order};"; $res = mysqli_query(self::$db, $sql); $rows = []; while ($row = mysqli_fetch_assoc($res)) { $rows[] = $row; } return $rows; } //数据库连接查询器 public static function getDb() { //如果初始化成功则返回mysqli连接对象,否则返回null return self::$db ?: null; } }
点击 "运行实例" 按钮查看在线实例
连接测试
<?php require './class/Db.php'; $db = new Db('root','root','php'); //在类外部访问类静态方法select,可以直接使用类的实例引用 $table = 'staff'; //echo '<pre>'.print_r($db->select($table),true).'</pre>'; //给出条件与排序规则 $fields = 'name, age'; $where = 'WHERE age<25 '; $order = 'ORDER BY age DESC'; //带上条件进行查询 //echo '<pre>'.print_r($db->select('staff',$fields,$where,$order),true).'</pre>'; //但强烈推荐在类的外部,使用类名来引用类中的静态成员 echo '<pre>'.print_r(Db::select($table,$fields,$where,$order),true).'</pre>'; //在类外部访问类中的静态属性,因为要访问的是受保护的,所以通过查询器来访问 var_dump(Db::getDb()) ; //类中的公共静态属性,可以直接用类进行访问,不过,静态属性名必须要加$ echo '数据库的类型是: '.Db::$dbType;
点击 "运行实例" 按钮查看在线实例