博主信息
博文 34
粉丝 0
评论 0
访问量 33209
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
类方法重载+TP5.1链式操作案例+后期静态绑定的原理和使用场景分析
罗盼的博客
原创
1388人浏览过

实例

<?php
header("content-type:text/html; charset=utf-8");
/*方法重载
__call($method,$arguments);用户访问一个不存在或者无权限的方法时调用
第一个参数是方法名,第二个参数是方法的要调用的方法的参数
__callstatic($method,$arguments)用户访问一个不存在或者无权限的静态方法时调用
*/
class students 
{
    private  $name;//学生姓名
    private  $score;//分数
    private  $course;//课程
    
    //构造方法,初始化变量
    public function __construct($name,$course,$score) {
        $this->name = $name;
        $this->course = $course;
        $this->score = $score;
    }

   
    public function  s_information($name = '',$course = '',$score = ''){
        
       return $name.'的'.$course.'成绩是:'.$score.'<br>'; 
        
    }
    public static function  stu1_info($name = '',$course = '',$score = ''){
        
       return $name.'的'.$course.'成绩是:'.$score.'<br>'; 
        
    }
    
    public function __call($name, $arguments) {//方法的动态重载        
       //return '$name是:'.$name.'<br>';
      return $arguments[0].'的'.$arguments[1].'成绩是:'.$arguments[2].'<br>'; 
        
    }
    
    public static function __callStatic($name, $arguments) {//静态方法的动态重载
        
       return $arguments[0].'的'.$arguments[1].'成绩是:'.$arguments[2].'<br>';   
    }


    
}

$student_one = new students('小王','英语','96');
echo $student_one->s_information('小胡','数学','96');
echo $student_one->stu_information( '小王','英语','25' );
echo students::stu1_info('小孙','语文','88');


/*
1.call_user_func_array($method:方法,$arr:方法的数组参数);
2.call_user_func_array([$object:对象,$function:方法名],[$arr]:方法的数组参数);
3.call_user_func_array([‘object’:对象名,$function:静态方法名],[$arr]:方法的数组参数);
案例:tp5中的链式调用Db::table('table')->field('account,password')->where('id>10')->select();
*/

class Db
{
    public static function __callStatic($name, $arguments) {
        
      return  call_user_func_array( array( new Query(),$name),$arguments);//返回对象
    }
   
}

$result = Db::table('`userinfo`')->fields()->where('`id`>10')->select();
print_r($result);


class Query
{
    private $table;
    private $where;
    private $field;
    
   
  public function table($table)
  {   
    $this->table = $table;//获取表名
    return $this;//返回当前类
    
  }
  
  public function fields($field='*')
  {  
    
    $this->field = $field;//获取要取得数据列
    return $this;//返回当前类
  }

   public function where($where)
   {    
    $this->where = $where;//获取查询条件
    return $this;//返回当前类
  }
   
   public function select()
   {
    //拼接sql语句
    $sql = "SELECT  {$this->field}  FROM  {$this->table}  WHERE  {$this->where}";
    //echo $sql;
    //连接数据库
    $pdo = new PDO('mysql:host=localhost;dbname=test','root','root');
    
    //执行查询
    $stmt =  $pdo->prepare($sql);
    $stmt->execute();
    $res =  $stmt->fetchAll(PDO::FETCH_ASSOC);
    return $res;//返回查询结果
    
   }

}

/*后期静态绑定的原理和使用场景分析?
后期静态绑定原理是在代码运行阶段,静态绑定对象使用者。
应用场景分析:主要用于子类静态继承中,当父类调用自身方法self::function时;执行对象是父类没有错误,
父类调用了自身的静态方法;如果有子类静态继承父类的话,执行的self::function方法时,
对象就会发生错误,此时就需要后期静态绑定子类对象调用self::function.此时将父类方法中
self::function改为static:function,指定谁调用,执行对象就是谁。


*/





?>

运行实例 »

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


批改状态:合格

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