Blogger Information
Blog 71
fans 1
comment 1
visits 86940
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
用静态成员定义数据库操作类
小威的博客
Original
709 people have browsed it
  • 使用静态成员,定义数据库操作类


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

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

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

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

运行实例 »

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

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