博客列表 >用静态成员定义数据库操作类

用静态成员定义数据库操作类

小威的博客
小威的博客原创
2018年06月06日 08:11:56710浏览
  • 使用静态成员,定义数据库操作类


 * 类中的静态成员:静态属性与静态方法

 * 作用域: 静态成员属于类所有,必须用类进行调用,不能使用对象调用

 * 该类的静态成员,被该类的所有实例对象所共享

 * 静态成员的引用: 在类中使用 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;

运行实例 »

点击 "运行实例" 按钮查看在线实例

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议