批改状态:合格
老师批语:咱们周未班还在坚持写作业的同学, 不多了, 希望你走到最后
实现isset()和unset()访问拦截操作
//重载:属性访问拦截器// __isset(), __unset()对不可访问的属性进行调用// isset() 函数用于检测变量是否已设置并且非 NULL// unset()删除指定的变量且传回true,参数为要删除的变量class User{public $name;private $age;public function __construct($name,$age){$this->name=$name;$this->age=$age;}// 在外部对一个不可访问的属性使用isset()函数时,调用__isset()方法,在类内部检测成员是否存在public function __isset($value){return isset($this->$value);}// __unset()对一个不可访问的属性进行调用unset()时自动调用public function __unset($value){unset($this->$value);}}$user=new User('张三','21');// $name为公开成员可以直接使用isset函数var_dump(isset($user->name));echo '<br>';var_dump(isset($user->age));echo '<hr>';print_r($user);//打印$user对象echo '<br>';//类中的公开属性成员可以直接被删除unset($user->name);print_r($user);echo '<br>';// unset()删除非公开成员,调用类中的__unset方法unset($user->age);print_r($user);

事件委托:insert(), update(), delete()方法
//查询类class Query{protected $db; // 连接对象protected $table; // 数据表protected $field; // 字段列表protected $where; // 条件protected $limit; // 记录数量// 构造方法:连接数据库public function __construct($dsn,$username,$password){$this->connect($dsn,$username,$password);}// 数据库连接public function connect($dsn,$username,$password){$this->db=new PDO($dsn,$username,$password);}// 设置数据表表名public function table($table){$this->table=$table;return $this; // 返回当前类的实例,方便链式调用后面的方法,必须加上}// 设置字段列表public function field($field){$this->field=$field;return $this;}// 设置条件public function where($id='id',$key=0,$b='='){$this->where=$id.$b.'\''.$key.'\'';;return $this;}// 设置返回的记录数量public function limit($limit){$this->limit=$limit;return $this;}// 生成sql语句public function getSql($value,$m='',$n=''){switch($value){case 'select'://查询:SELECT 字段列表 FROM 表名 WHERE 条件 LIMIT 数量;$sql=sprintf('SELECT %s FROM %s LIMIT %d',$this->field,$this->table,$this->limit);break;case 'insert'://插入:INSERT 表名 SET 字段列表;INSERT INTO 表名 (字段列表) VALUES (字段列表对应的值)// $sql=sprintf('INSERT %s SET %s',$this->table,$this->field);$sql=sprintf('INSERT INTO %s (%s) VALUES (%s)',$this->table,$m,$n);break;case 'update'://更新:UPDATE 表名 SET 字段列表 WHERE 条件;$sql=sprintf('UPDATE %s SET %s WHERE %s',$this->table,$m,$this->where);break;case 'delete'://删除:DELETE FROM 表名 WHERE 条件;$sql=sprintf('DELETE FROM %s WHERE %s',$this->table,$this->where);break;}return $sql;}// 执行查询操作public function select(){return $this->db->query($this->getSql('select'))->fetchAll(PDO::FETCH_ASSOC);}// 执行插入操作public function insert($inserts=[]){// 将数组中的键值调取出作为SQL的字段列表名$m1='`'.implode('`,`',array_keys($inserts)).'`';// 将数组中的值作为SQL中的字段列表名对应的值$n1='\''. implode('\',\'',$inserts) . '\'';return $this->db->exec($this->getSql('insert',$m1,$n1));}// 执行更新操作public function update($args=[]){$string='';foreach($args as $key=>$v){// 将需要更新的数组中的数据拼接成字符串$string.= $key.'=\''.$v.'\',';}// echo $string;return $this->db->exec($this->getSql('update',rtrim($string,',')));// rtrim()移除字符串右侧的空白字符或其他预定义字符}// 执行删除操作public function delete(){return $this->db->query($this->getSql('delete'));}}// 数据库操作class DB{// 静态方法拦截public static function __callStatic($name,$args){$dsn = 'mysql:host=localhost;dbname=phpedu';$username='root';$password='root';$query = new Query($dsn, $username, $password);return call_user_func_array([$query,$name],$args);}}// 数据输出:查询操作$users=DB::table('user')->field('id,name,email')->limit(5)->select();foreach ($users as $user) {printf('<li>%s</li>',implode(',', $user));}echo '<hr>';// 数据输出:插入操作$user=DB::table('user')->insert(['name'=>'依依','email'=>'12345@qq.com','password'=>sha1('229988')]);echo $user ?'插入成功':'插入失败';echo '<hr>';// 数据输出:更新操作$user=DB::table('user')->where('id','14')->update(['name'=>'张龙4','email'=>'zhanglong4@qq.com','password'=>sha1('2249988')]);print_r($user);echo '<hr>';// 数据输出:删除操作$user=DB::table('user')->where('id','15')->delete();print_r($user);echo $user ?'删除成功':'删除失败';echo '<hr>';

sleep()与wakeup()
// 序列化__sleep(), 反序列化__wakeup()class Connection{private $params=[]; // 连接参数private $link=null; // 连接对象// 构造方法 初始化操作public function __construct($dsn,$username,$password){$this->params['dsn']=$dsn;$this->params['username']=$username;$this->params['password']=$password;$this->connect();}// 连接方法public function connect(){// 实例化$this->link=new PDO(...array_values($this->params));// array_values() 函数返回包含数组中所有的值的数组}// 对象被序列化时进行调用,获取连接参数,返回的是一个数组public function __sleep(){return ['params'];}// 对象被反序列化时,要求自动连接数据库public function __wakeup(){$this->connect();}// 查询操作public function select($sql){return $this->link->query($sql)->fetchAll(PDO::FETCH_ASSOC);}}// 将参数进行赋值并实例化$dsn = 'mysql:host=localhost;dbname=phpedu';$username='root';$password='root';$db = new Connection($dsn, $username, $password);// 序列化后是一个字符串$str = serialize($db);echo $str .'<hr>';// 反序列化后是一个对象$link=unserialize($str);print_r($db->select('select * from user limit 5'));

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号