批改状态:合格
老师批语:
<?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,指定谁调用,执行对象就是谁。
*/
?>点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号