博客列表 >类方法重载+TP5.1链式操作案例+后期静态绑定的原理和使用场景分析

类方法重载+TP5.1链式操作案例+后期静态绑定的原理和使用场景分析

罗盼的博客
罗盼的博客原创
2018年09月06日 01:15:021202浏览

实例

<?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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议