Blogger Information
Blog 21
fans 0
comment 0
visits 18656
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
方法重载原理/call_user_func_array/TP框架的链式查询/后期静态绑定—2018年9月7日01时50分
耗子的博客
Original
866 people have browsed it

本课程学习:

方法重载原理

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

Correction status:qualified

Teacher's comments:
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