博主信息
博文 21
粉丝 0
评论 0
访问量 22243
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
方法重载原理/call_user_func_array/TP框架的链式查询/后期静态绑定—2018年9月7日01时50分
耗子的博客
原创
1024人浏览过

本课程学习:

方法重载原理

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(['类','方法'],[数组])

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学