博主信息
博文 34
粉丝 1
评论 0
访问量 29613
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
后期静态绑定与类的深入应用_2018年09月04日
theYon的博客
原创
693人浏览过

后期静态绑定与类的深入应用
主要知识点
1)call_user_func_array():执行方法或回调函数
2)__callStatic($method, $arguments):当用户访问一个不存在或无权限的静态方法时调用

3) __call($method, $arguments): 当用户访问一个不存在或无权限的方法时调用

4)后期静态绑定


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


用到的关键字:static::

原理:存储了在上一个“非转发调用”(non-forwarding call)中的类名,

意思是当我们调用一个转发调用的静态调用时,实际调用的类是上一个非转发调用的类。

而且代码执行分二种个阶段: 前期:编译阶段, 后期:运行阶段

这种在运行阶段才确定方法的调用者的技术: 后期[运行阶段]静态绑定, 延迟静态绑定

引入后期静态绑定的目的是:用于在继承范围内引用静态调用的类,

所以, 可以用后期静态绑定的办法解决单例继承问题。



代码

Query.php

<?php

class Query
{
    // 初始化数据库连接对象
    private $db = null;
    // 查询字段
    private $sql = [];
    // 连接数据库
    public function __construct()
    {
        $this->db = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
    }
    // table表名
    public function table($table)
    {
        $this->sql['table'] = $table;
        return $this;
    }
    // 输出内容
    public function fields($fields)
    {
        $this->sql['fields'] = $fields;
        return $this;
    }
    // 查询条件
    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->db->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
        // return $sql;
    }
}

demo2.php

<?php

require 'Query.php';

class Db
{
    public static function __callStatic($name,$arguments)
    {
        // call_user_func_array([对象/类名, '方法'],[参数数组])
        return call_user_func_array([(new Query()),$name],$arguments);
    }
}

$result = Db::table('staff')
            ->fields('staff_id,name,salary')
            ->where('age < 25')
            ->select();

var_dump($result);

运行结果

微信截图_20180906212817.png

总结

        通过对模拟ThinkPHP5.1中的数据库链式操作,减少了自己对该框架的源码阅读的阻碍。同时初步认识后期静态绑定的用法

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学