使用静态成员,定义数据库操作类
* 类中的静态成员:静态属性与静态方法
* 作用域: 静态成员属于类所有,必须用类进行调用,不能使用对象调用
* 该类的静态成员,被该类的所有实例对象所共享
* 静态成员的引用: 在类中使用 self::, 在类外部使用 类名::
* 类成员静态化,是面向对象编程的一种趋势,有很多的模拟手段,请格外重视
* 类成中静态化使用关键字:static来实现
* 静态技术的另一个使用场景是: 静态延迟绑定技术,后面我们会详细学习
实例
//使用静态成员,定义数据库操作类
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;
}
}
运行实例 »
点击 "运行实例" 按钮查看在线实例连接测试
实例
require './class/Db.php';
$db = new Db('root','root','php');
//在类外部访问类静态方法select,可以直接使用类的实例引用
$table = 'staff';
//echo '
'.print_r($db->select($table),true).'';
//给出条件与排序规则
$fields = 'name, age';
$where = 'WHERE age<25 ';
$order = 'ORDER BY age DESC';
//带上条件进行查询
//echo '
'.print_r($db->select('staff',$fields,$where,$order),true).'';
//但强烈推荐在类的外部,使用类名来引用类中的静态成员
echo '
'.print_r(Db::select($table,$fields,$where,$order),true).'';
//在类外部访问类中的静态属性,因为要访问的是受保护的,所以通过查询器来访问
var_dump(Db::getDb()) ;
//类中的公共静态属性,可以直接用类进行访问,不过,静态属性名必须要加$
echo '数据库的类型是: '.Db::$dbType;
运行实例 »
点击 "运行实例" 按钮查看在线实例