实例
<?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,指定谁调用,执行对象就是谁。 */ ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例