php函数(方法)简单总结:
语法体为:function 函数名(前面可以跟约束类型(string array ... int) (形参前面可以有寻址符,也叫引用符&)形参){ 函数体}example:function get(array $arr){ return implode(':',$arr);}
具体综合用法在这个PDO查询生成器的实战中:
<?phpnamespace Database; //定义Database命名空间use PDO; //引用PDO//创建db类class db{ //定义$link受保护属性 protected $link; //定义受保护的$options属性,用来存储field,table,where,order,limit..... having,group 暂时没写 protected $options=[ 'field'=>'*','table'=>'','where'=>'','order'=>'','limit'=>'' ]; //构造函数,这里用到了约束类型,array public function __construct(array $config) { //调用connect方法 $this->connect($config); } //初始化数据链接条件,创建pdo对象链接数据并保存到link变量 protected function connect(array $config) { $dsn = sprintf("%s:host=%s;dbname=%s;charset=%s", $config['type'], $config['host'], $config['name'], $config['charset'] ); $this->link = new PDO($dsn,$config['user'],$config['pass'],[PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]); } //构造query查询方法,接收sql语句,以及数组参数。执行后直接返回数据这里用到了约束类型string array public function query(string $sql, array $vars) { $sth = $this->link->prepare($sql); $sth->execute($vars); return $sth->fetchAll(); } //执行方法,接收查询语句后,直接返回执行 public function execute(string $sql, array $vars) { $sth = $this->link->prepare($sql); return $sth->execute($vars); } //创建table方法,接收$table传参后保存对象并返回 public function table(string $table) { $this->options['table'] = $table; return $this; } //创建field方法,这里用到了语法糖可变长参数...,因为查询字段不固定,...很实用的处理了这个问题, //用implode函数构造出正确的字段并返回 public function field(...$fields) { $this->options['field'] = '`'.implode('`,`',$fields).'`'; return $this; } //创建where方法 保存对象并返回 public function where(...$where) { $this->options['where'] = 'WHERE '.implode(',',$where); return $this; } //创建get方法,执行查询最后返回结果集 public function get() { $sql = "SELECT {$this->options['field']} FROM {$this->options['table']} {$this->options['where']}"; echo $sql.'<br >'; $sth =$this->link->prepare($sql); $sth->execute(); return $sth->fetchAll(); }}
<?php//检查php.ini配置文件里的display_error是否设置,没设置就设置开启if (!ini_get("display_errors")){ ini_set("display_errors",1);}use Database\db;//引入命名空间$config = include 'config.php'; //加载数据库配置文件include "db.php";//加载数据库里try{ $db = new db($config); //创建一个$db对象 /*测试语句 $db->execute("INSERT INTO user SET username=?,password=?",['ayaya',md5('123456')]); $rows = $db->query("SELECT * FROM user WHERE id>:id",[':id'=>1]); print_r($rows);*/ $row = $db->table('user')->where('id>0')->get();//执行链式操作 dd($row); //格式化数据并打印,今天终于开始学函数了,立马自己写个简单的试试,哈哈哈!}catch (Exception $e){ die("数据库链接出错:".$e->getMessage());}function dd(array $vars){ echo '<pre>'; print_r($vars);}
后续将会接着完善功能以及加入(interface)接口和(Factory)工厂类用单例模式,根据model类名来对应表名,接着继续练习、完善PDO对数据库的操作