批改状态:合格
老师批语:sql语句中的字段和表名,应该加上反引号, 养成好习惯
__isset()是测定变量是否设定用的函数,传入一个变量作为参数,如果传入的变量存在则传回true,否则传回false。
如果对象里面成员是公有的,我们就可以使用这个函数来测定成员属性,如果是私有的成员属性,这个函数就不起作用了,原因就是因为私有的被封装了,在外部不可见。那么我们就不可以在对象的外部使用isset()函数来测定私有成员属性是否被设定了呢?当然是可以的,但不是一成不变。
你只要在类里面加上一个isset()方法就可以了,当在类外部使用isset()函数来测定对象里面的私有成员是否被设定时,就会自动调用类里面的isset()方法了帮我们完成这样的操作。
unset()这个函数的作用是删除指定的变量且传回true,参数为要删除的变量。
1、 如果一个对象里面的成员属性是公有的,就可以使用这个函数在对象外面删除对象的公有属性。
2、 如果对象的成员属性是私有的,我使用这个函数就没有权限去删除。
虽然有以上两种情况,但我想说的是同样如果你在一个对象里面加上unset()这个方法,就可以在对象的外部去删除对象的私有成员属性了。
在对象里面加上了unset()这个方法之后,在对象外部使用“unset()”函数删除对象内部的私有成员属性时,对象会自动调用unset()函数来帮我们删除对象内部的私有成员属性。
示例:
class people{public $username;private $age;public function __construct($username,$age){$this->username = $username;$this->age = $age;}//外部判断私有属性是否存在使用__isset自动执行//public公用属性不通过__isset来执行public function __isset($value){//外部调用isset,公用属性public返回false不被执行//私有属性private 返回true,可以对私有属性进行操作echo isset($this->$value);}//外部使用__unset用来删除指定的变量。//私有属性自动触发__unset进行操作public function __unset($value){echo isset($this->$value);}}$people = new people('曹操',39);var_dump(isset($people->$username));echo "<hr>";var_dump(isset($people->age));echo "<hr>";unset($people->$username);echo "<hr>";unset($people->age);
示例图:

总结:对isset的使用中可以直接处理掉公用属性,可以对私有属性赋值或者删除。同样unset也可以进行相同操作
示例:
<?php//方法委托实战:数据库查询构造器(链式查询)class Query{// 连接对象protected $db;// 数据表protected $table;// 字段列表protected $field;// 记录数量protected $limit;//对数据赋值处理public $updates;// 构造方法: 连接数据库public function __construct($dsn, $username, $password){$this->connect($dsn,$username,$password);}//连接数据库private 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 limit($limit){$this->limit = $limit;return $this;}//设置条件public function condition($condition){$this->condition = $condition;return $this;}//设置内容public function content($content){$this->content = $content;return $this;}//对数据库的增和改对数据表和值进行赋值处理private function updates(){$field = $this->field;$content = $this->content;$values = array_combine($field,$content);foreach ($values as $key =>$value){$upd[] = "{$key}='{$value}'";}return join(",",$upd);}public function getSql($value){switch ($value){case 'select':return sprintf('SELECT %s FROM %s LIMIT %s', $this->field, $this->table, $this->limit);break;case 'update':$this->updates = $this->updates(); //将数据赋值处理return sprintf('UPDATE %s SET %s WHERE %s',$this->table, $this->updates, $this->condition);break;case 'insert':$this->updates = $this->updates(); //将数据赋值处理return sprintf('INSERT %s SET %s', $this->table,$this->updates);break;case 'delete':return sprintf('DELETE FROM %s WHERE %s',$this->table,$this->condition);break;default :return '没有查询到的数据!';}}// 执行查询public function select(){return $this->db->query($this->getSql('select'))->fetchAll(PDO::FETCH_ASSOC);}// 执行更新public function update(){return $this->db->query($this->getSql('update'));}// 执行增加public function insert(){return $this->db->query($this->getSql('insert'));}//执行删除public function delete(){return $this->db->query($this->getSql('delete'));}}class DB{public static function __callStatic($name, $args){//获取查询类的对象: new Query()$dsn = 'mysql:host=localhost;dbname=mysqli';$username = 'root';$password = '142536';$query = new Query($dsn,$username,$password);return call_user_func([$query,$name],...$args);}}$result = DB::table('user')->field(['username','password','sex','age','email','mobile'])->content(['天蓬',sha1('142536'),'男','38','tp@126.com','16612344321'])->insert();//使用数组赋值echo $result ? '添加成功' :'添加失败';echo "<hr>";$result =DB::table('user')->field('username')->limit(10)->select();print_r($result); //输出查询echo "<hr>";$result = DB::table('user')->field(['username','password','sex','age','email','mobile'])->content(['啸天',sha1('142536'),'男','29','xtq@qq.com','1555551234'])->condition("username = '嫦娥'")->update();//使用数组赋值echo $result ? '更新成功' :'更新失败';echo "<hr>";$result = DB::table('user')->condition('Id > 335')->delete();print_r($result);echo $result ? '删除成功' :'删除失败';
示例图:

总结:案例中使用了array_combine对数据进行赋值后传入SQL执行。改写了输入字符串为数组。对类的构造方法又进一步学习。重点在return $this、对多个方法串联到一起。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号