批改状态:合格
老师批语:正在加油补作业呀, 加油
<?php
namespace _1008;
class k{
private $a;
//初始化
public function __construct($a)
{
$this->a=$a;
}
//重载
//1.读操作
//外部势力打探内部消息,需要传递消息的人,间谍
public function __get($a){
return $this->$a;
}
}
$obj= new k('这是一个读操作');
echo $obj->a;
echo'<hr>';点击 "运行实例" 按钮查看在线实例

<?php
namespace _1008;
class k{
private $a;
//初始化
public function __construct($a)
{
$this->a=$a;
}
//重载
//1.读操作
public function __get($a){
return $this->$a;
}
//2.写操作,更改,
//外面的势力想更改内部势力成员就要安排内应处理
public function __set($a,$value)
{
$this->$a=$value;
}
}
$obj= new k('这是一个读操作');
echo $obj->a;
echo'<hr>';
$obj->a=6666;
echo $obj->a
?>点击 "运行实例" 按钮查看在线实例

<?php
namespace _1008;
class k{
private $a;
//初始化
public function __construct($a)
{
$this->a=$a;
}
//重载
//外部势力不知有无消息,消息真假,派人打探,探子
public function __isset($a)
{
return isset($this->$a);
}
}
$obj= new k('666');
echo isset($obj->a)?'存在':'不存在';
?>点击 "运行实例" 按钮查看在线实例

<?php
namespace _1008;
class k
{
private $a;
//初始化
public function __construct($a)
{
$this->a=$a;
}
//重载
public function __get($a){
return $this->$a;
}
//外部势力销毁内部成员,需要内应行动
public function __unset($a)
{
unset($this->$a);
}
}
$obj= new k('这是一个读操作');
echo $obj->a;
echo'<hr>';
unset($obj->a);
echo $obj->a;
?>点击 "运行实例" 按钮查看在线实例

以下为实例演练回调:
<?php
namespace _1008;
function sub($a,$b)
{
return ($a-$b);
}
//回调执行函数
echo call_user_func_array(__NAMESPACE__.'\sub',[77,55]);
?>点击 "运行实例" 按钮查看在线实例

<?php
//回调对象
class k1
{
public function sub($a,$b)
{
return ($a-$b);
}
}
$obj = new k1();
echo call_user_func_array([$obj,'sub'], [99,66]);
?>点击 "运行实例" 按钮查看在线实例

<?php
//回调类
class k
{
public static function sub($a,$b)
{
return ($a-$b);
}
}
echo call_user_func_array([k::class,'sub'], [8888,1111]);
?>点击 "运行实例" 按钮查看在线实例

以下为实例演练方法重载:
<?php
//方法重载
class k
{
public static function __callStatic($name,$args)
{
return '方法是:'.$name.'<br>参数列表:<pre>'. print_r($args,true);
}
}
echo k:: b('方','法','重','载');
?>点击 "运行实例" 按钮查看在线实例

以下为实例演练数据库链式调用:
首先为query,数据库查询类
<?php
// 数据库查询类
class Query
{
// 连接对象
public $pdo = null;
// 表名
public $table;
// 字段
public $field = '*';
// 条件
public $where;
// 数量
public $limit;
//以上为写SELECT语句时所用到的成分
// 构造方法,用来连接数据库
public function __construct($pdo)
{
// 实例时自动连接数据库
$this->pdo = $pdo;
}
// 设置数据表名称
public function table($tableName)
{
//赋值
$this->table = $tableName;
//返回当前类实例, 用来链式调用后面的其它方法
return $this;
}
// 设置数据表字段
public function field($fields = '*')
{
//判断当前输入值为空,给默认值*,否则为当前字段
$this->field = empty($fields) ? '*' : $fields;
return $this;
}
// 设置查询条件
//条件为为空,任意条件
public function where($where = '')
{
//为空时,返回当前空,不空,where+当前条件
$this->where = empty($where) ? $where : ' WHERE '. $where;
return $this;
}
// 设置显示数量
public function limit($limit)
{
$this->limit = empty($limit) ? $limit : ' LIMIT '. $limit;
return $this;
}
// 生成SQL语句
public function select()
{
// 拼装SQL
$sql = 'SELECT '
. $this->field // 字段列表
. ' FROM '
. $this->table // 数据表
. $this->where // 条件
. $this->limit; // 数量
// 预处理
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
}
//然后用demo里方法重载来调用
?>点击 "运行实例" 按钮查看在线实例
然后是demo
<?php
require 'Query.php';
class DB
{
// 连接对象
protected static $pdo = null;
// 数据库的连接方法.完成数据库连接
public static function connection()
{
self::$pdo = new \PDO('mysql:host=127.0.0.1;dbname=chubu', 'root', 'root');
}
//方法重载来调用
public static function __callStatic($name, $arguments)
{
// 连接数据库
self::connection();
// 实例化查询类,将连接对象做为参数,传给query
$query = new Query(self::$pdo);
// 调用查询对象$query中的对应的方法
return call_user_func_array([$query, $name],$arguments);
}
}
$staffs = DB::table('ying')
->field('mov_id,name')
->where('mov_id > 1')
->limit(7)
->select();
// 遍历
foreach ($staffs as $staff) {
print_r($staff); echo '<br>';
}点击 "运行实例" 按钮查看在线实例

对于数据库的连接调用始实现,就是query和demo9.php这两个文件的代码,我理解为,将SELECT语句换了一种写法,原来的写法是:SELECT 字段 FROM 表名 WHERE 条件 LIMIT 显示数量。现在的写法相当于是把,字段,表名,条件,显示数量,在query内写作了一个个变量,然后用这些变量再组成SELECT语句,在query内写好SELECT语句后到demo9.php(相当于课件的demo5.php)里面连接数据库,然后用类的静态重载完成链式调用
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号