本课程学习:
方法重载原理
call_user_func_array
TP框架的链式查询
后期静态绑定
实例
<?php /** * 实战案例: * 方法重载的实例:模拟TP5.1中的链式操作 * * 用方法重载实现方法跨类调用 */ require 'Query.php'; class Db { public static function __callStatic($name, $arguments) { // $ages=implode(',',$arguments);//自动拆分数组以,分开 // return '当前访问的方法是:'.__METHOD__.'调用的方法是:'.$name.'传入的参数是:'.$arguments; return call_user_func_array([(new query()),$name],$arguments); } } $result=Db::Table('user') ->fields('id,user,name,salary')//测试时犯错注意这里输出的字段并不是以数值的方式 ->where('id<50') ->select(); //echo '<pre>'; //var_dump($result); //将数据以表格的方式输出 $table='<table border="1" cellpadding="5" cellspacing="0" width="80%" align="center">'; $table.='<caption style="font-size: 16px;margin: 20px"><h2>员工信息表</h2></caption>'; $table.='<tr style="background: lightskyblue"><th>ID</th><th>用户</th><th>名称</th><th>工资</th></th></tr>'; foreach ($result as $user) { $table.='<tr style="text-align: center">'; $table.='<td>'.$user['id'].'</td>'; $table.='<td>'.$user['user'].'</td>'; $table.='<td>'.$user['name'].'</td>'; $table.='<td>'.$user['salary'].'</td>'; } $table.='</table>'; $num='<p style="text-align: center">当前数据的总行数为:<span style="color: red">'.count($result).'</span>'.'条记录</p>'; echo $table; echo $num;
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<?php class query { //保存sql语句的各个组成部分 private $sql=[]; //数据库连接对象 private $pdo=null; //构造方法:连接数据库 public function __construct() { $this->pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); } //table()获取SQL语句的表名 public function table($table) { $this->sql['table']=$table; return $this; //返回当前实例对象,便于链式调用该对象的方法 } //fields()获取sql语句的字段列表 public function fields($fields) { $this->sql['fields']=$fields; return $this; } //where() public function where($where) { $this->sql['where']=$where; return $this; } //select() public function select() { //拼装SELECT 查询语句 $sql="SELECT {$this->sql['fields']} FROM {$this->sql['table']} WHERE {$this->sql['where']}"; $stmt=$this->pdo->prepare($sql); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
2. 问答: 后期静态绑定的原理与使用场景分析
通过静态继承后,始终指向调用的上下文环境
后期静态绑定:静态继承的上下文环境,用于动态设置静态方法的调用者
代码执行分二种个阶段: 前期:编译阶段, 后期:运行阶段
这种在运行阶段才确定方法的调用者的技术: 后期[运行阶段]静态绑定, 延迟静态绑定
总结:
* 方法重载的实战,call_user_func_array() 执行方法或回调函数
* 参数:2个, 执行回调函数call_user_func_array(函数,[参数数组])
* 参数:2个数组 执行对象方法 call_user_func_array([对象,方法],[数组])
* 参数:2个数组 执行类中静态方法 call_user_func_array(['类','方法'],[数组])