首页> 基础笔记 >PHP基础学习 >面向对象 面向对象

PHP类的其他使用技巧: 连贯调用

作者:小萝卜 2019-09-04 浏览 1054

简介PHP类的其他使用技巧: 连贯调用,自定义类对数据库进行增删改查

<?php
//类的其他使用技巧: 连贯调用

class Demo{
    public $str;
    
    public function append($s){
        $this->str.=$s; //追加字串
        return $this;
    }
}

$d = new Demo();
//使用连贯操作
echo $d->append("aa")->append("bb")->append("cc")->str;
//$d->append("bb");
//$d->append("cc");
//echo $d->str;
对数据库连贯操作实例:
<?php

//对Model的实现目标

$m = new Model("stu");

$m->select();  //select * from stu;

$m->where("id>10")->select();  //select * from stu where id>10;

$m->where("sex='m'")->order("age desc")->limit(3)->select();
//select * from stu where sex='m' order by age desc limit 3;



//自定义数据库单表信息操作类Model

//定义一个Model
class Model{
    protected $tabName; //表名
    protected $link=null; //连接资源
    protected $pk = "id"; //表的主键名
    protected $fields=array(); //表字段信息
    
    //构造方法,实现了表名初始化,数据库的连接
    public function __construct($tabName){
        $this->tabName = $tabName;
        //连接数据库
        $this->link = @mysql_connect(HOST,USER,PASS)or die("数据库连接失败!");
        //选择数据库设置编码
        mysql_select_db(DBNAME,$this->link);
        mysql_set_charset("UTF8");
        //调用加载对应表结构信息
        $this->getFields(); 
    }
    
    //加载当前表的字段信息 
    private function getFields(){
        //sql语句
        $sql = "desc {$this->tabName}";
        $result = mysql_query($sql,$this->link);
        //遍历当前表的每个字段。
        while($rows = mysql_fetch_assoc($result)){
            $this->fields[]=$rows['Field']; //获取每个字段名并放到fields属性中
            //判断是否是主键
            if($rows['Key']=="PRI"){
                $this->pk = $rows['Field'];
            }
        }
        mysql_free_result($result);
    }
    
    //获取所有数据信息
    public function select(){
        $sql = "select * from {$this->tabName}";
        $result = mysql_query($sql,$this->link);
        //解析数据
        $list = array();
        while($rows = mysql_fetch_assoc($result)){
            $list[]=$rows;
        }
        mysql_free_result($result);
        
        return $list;
    }
    
    //获取指定的单条数据信息
    public function find($id){
        $sql = "select * from {$this->tabName} where {$this->pk}=".$id;
        $result = mysql_query($sql,$this->link);
        //解析数据
        if($result && mysql_num_rows($result)>0){
            return mysql_fetch_assoc($result); 
        }
        return null;
    }
    
    //执行添加
    public function insert($data=array()){
        //如果不给参数,则从POST中获取
        if(empty($data)){
            $data=$_POST;
        }
        $fieldlist=array();//封装字段
        $valuelist=array();//封装要添加的值
        //遍历要添加的数据,进行筛选
        foreach($data as $k=>$v){
            //判断是否是有效数据(字段名是否对)
            if(in_array($k,$this->fields)){
                $fieldlist[]=$k;
                $valuelist[]=$v;
            }
        }
        //拼装sql语句
        $sql = "insert into {$this->tabName}(".implode(",",$fieldlist).") values('".implode("','",$valuelist)."')";
        //echo $sql;
        //执行添加
        mysql_query($sql,$this->link);
        //返回结果
        return mysql_insert_id($this->link);
    }
    
    //执行修改
    public function update($data=array()){
        //如果不给参数,则从POST中获取
        if(empty($data)){
            $data=$_POST;
        }
        $valuelist=array();//封装要修改的值
        //遍历要修改的数据,进行筛选
        foreach($data as $k=>$v){
            //判断是否是有效数据(字段名是否对),且不是主键
            if(in_array($k,$this->fields) && $k!=$this->pk){
                $valuelist[]="{$k}='{$v}'";
            }
        }
     
        //拼装sql语句
        $sql = "update {$this->tabName} set ".implode(",",$valuelist)." where {$this->pk}={$data[$this->pk]}";
        //echo $sql;
        //执行修改
        mysql_query($sql,$this->link);
        //返回结果(影响行数)
        return mysql_affected_rows($this->link);
    }
    
    
    //删除信息方法
    public function delete($id){
        $sql = "delete from {$this->tabName} where {$this->pk}={$id}";
        mysql_query($sql,$this->link);
        //返回影响行数
        return mysql_affected_rows($this->link);
    }
    
    //定义一个析构方法用于关闭数据
    public function __destruct(){
        if($this->link){
            mysql_close($this->link);
        }
    }
}
 

很赞哦! (0)

文章评论

    高端网站建设