Blogger Information
Blog 24
fans 0
comment 0
visits 16321
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
方法重载与静态继承-2018年9月4日
鱼越龙门的博客
Original
947 people have browsed it

今天学习了方法重载与静态继承的知识:

代码:

实例

<?php
/**
 * 数据库查询类
 */
class Query{
    // 保存sql语句中的各个组成部分
    // SELECT 字段列表 FROM 表名 WHERE 条件
    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; //返回当前类实例对象,便于链式调用该对象的其它方法
    }
    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->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

运行实例 »

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


实例

<?php
/**
 * 方法重载的实战案例: 模拟ThinkPHP5.1中的数据库链式操作
 * 用方法重载实现方法跨类调用
 */
// Db::table()->fields()->where()->select();

require 'Query.php';
class Db{
    public static function __callStatic($name, $arguments)
    {
        return call_user_func_array([(new Query()),$name],$arguments);
    }
}
$result=Db::table('staff')->fields('staff_id,name,age,salary')->where('salary>4000')->select();
//print_r($result);
// 用表格将查询结果格式化输出
$table="<table border='1' cellpadding='5' cellspacing='0' align='center' width='60%'>";
$table.="<caption style='color:aqua;font-size:1.5rem'>员工信息表</caption>";
$table.="<tr bgcolor='#90ee90'><th>ID</th><th>姓名</th><th>年龄</th><th>工资</th><tr>";
foreach ($result as $staff){
    $table.='<tr align="center">';
    $table.='<td>'.$staff['staff_id'].'</td>';
    $table.='<td>'.$staff['name'].'</td>';
    $table.='<td>'.$staff['age'].'</td>';
    $table.='<td>'.$staff['salary'].'</td>';
    $table.='</td>';
}
$table.='</table>';
$num='<p style="text-align:center">共计<span style="color:red">'.count($result).'</span>条记录</p>';
echo $table, $num;

运行实例 »

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

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

答:代码执行分二种个阶段: 前期:编译阶段, 后期:运行阶段,这种在运行阶段才确定方法的调用者的技术: 后期[运行阶段]静态绑定, 延迟静态绑定,将 static 想像成一个变量: 始终指向静态方法的调用者


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