Blogger Information
Blog 35
fans 0
comment 0
visits 32663
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
使用方法重载与call_user_func_array()模拟TP框架的链式查询-后期静态绑定场景-2018-9-14
THPHP
Original
750 people have browsed it

使用方法重载与call_user_func_array()模拟TP框架的链式查询:

Db类文件:

实例

<?php
require 'Qurey.php';
class Db{
    public  static function __callStatic($name, $arguments)
    {
        // call_user_func_array([类,方法],[数组])
        return call_user_func_array([(new Qurey()),$name],$arguments);
    }
}
// table(表名)fields(字段')where(条件)select()执行语句方法
$result = Db::table('lianxi')->fields('id,name')->where('id > 0')->select();
print_r($result);

运行实例 »

点击 "运行实例" 按钮查看在线实例

Qurey类文件:

实例

<?php
class Qurey{
    // sql 语句
    private $sql = [];
    // 连接数据库
    private $pdo = null;
    // 构造方法,连接数据库
    public function __construct()
    {
        //  连接数据库并返回pdo对象
        $this->pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
    }
    // table 获取数据库表名
    public function table($table){
        $this->sql['$table'] = $table;
        return $this;
    }
    // table 获取数据库字段列表
    public function  fields($fields){
        $this->sql['fields'] = $fields;
        return $this; //
    }
    //where 获取sql语句查询条件
    public function  where($where){
        $this->sql['where'] = $where;
        return $this;
    }
    // 执行查询结果
    public function  select(){
        $sql = "SELECT {$this->sql['fields']} FROM {$this->sql['$table']} WHERE {$this->sql['where']}";
        // 预处理对象
        $stmt = $this->pdo->prepare($sql);
        // 执行sql语句
        $stmt->execute();
        // 获取结果集的关联数据
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

执行结果:

TIM截图20180914145823.png

2、后期静态绑定的原理与使用场景分析:

场景分析:

1、定义静态成员

2、后期静态绑定

后期静态绑定的原理代码:

实例

class One
{
    public static function hello()
    {
    return __METHOD__;  // 返回当前方法名
    }
    public static function world()
    {
        // 如果使用 self来访问静态方法,在子类中调用world()时,调用的方法是父类的方法,而子类world()方法并没有继承下来,
        //  return self::hello();
        // 使用static 关键字会让hello()方法进行继承下去,可以在子类来访问子类的静态方法
        return static::hello();
    }
}
class Two extends One
{
    public static function hello()
    {
        return __METHOD__;  // 返回当前方法名
    }
}
echo Two::hello(); // 调用的是子类的静态方法
// 在子类Two中将父类中的hello()进行重写,在调用world()时,本意是想调用子类中已重写的方法hello(),
// 怎么办? 在父类访问world()方法的hello()方法,添加stctic关键字就可以解决子类可以访问父类继承下来的静态方法
echo Two::world(); // 因为在父类添加了 stctic关键字所以他的最终调用的是子类的方法:结果为:Two::hello

运行实例 »

点击 "运行实例" 按钮查看在线实例


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