php拦截器unset用法,方法拦截器的__isset()、 __unset()及构造器中的数据库操作

isset和unset的使用

__isset:判断属性是否存在或者为空会自动触发

__isset()是测定变量是否设定用的函数,传入一个变量作为参数,如果传入的变量存在则传回true,否则传回false。

如果对象里面成员是公有的,我们就可以使用这个函数来测定成员属性,如果是私有的成员属性,这个函数就不起作用了,原因就是因为私有的被封装了,在外部不可见。那么我们就不可以在对象的外部使用isset()函数来测定私有成员属性是否被设定了呢?当然是可以的,但不是一成不变。

你只要在类里面加上一个isset()方法就可以了,当在类外部使用isset()函数来测定对象里面的私有成员是否被设定时,就会自动调用类里面的isset()方法了帮我们完成这样的操作。

__unset:当对不可访问属性调用unset()时被调用

unset()这个函数的作用是删除指定的变量且传回true,参数为要删除的变量。

1、 如果一个对象里面的成员属性是公有的,就可以使用这个函数在对象外面删除对象的公有属性。

2、 如果对象的成员属性是私有的,我使用这个函数就没有权限去删除。

虽然有以上两种情况,但我想说的是同样如果你在一个对象里面加上unset()这个方法,就可以在对象的外部去删除对象的私有成员属性了。

在对象里面加上了unset()这个方法之后,在对象外部使用“unset()”函数删除对象内部的私有成员属性时,对象会自动调用unset()函数来帮我们删除对象内部的私有成员属性。

示例:

classpeople

{

public$username;

private$age;

publicfunction__construct($username,$age)

{

$this->username=$username;

$this->age=$age;

}

//外部判断私有属性是否存在使用__isset自动执行

//public公用属性不通过__isset来执行

publicfunction__isset($value)

{

//外部调用isset,公用属性public返回false不被执行

//私有属性private 返回true,可以对私有属性进行操作

echo isset($this->$value);

}

//外部使用__unset用来删除指定的变量。

//私有属性自动触发__unset进行操作

publicfunction__unset($value)

{

echo isset($this->$value);

}

}

$people=newpeople('曹操',39);

var_dump(isset($people->$username));

echo"


";

var_dump(isset($people->age));

echo"


";

unset($people->$username);

echo"


";

unset($people->age);

示例图:

4e97e802249005358678d68799256dd0.png

总结:对isset的使用中可以直接处理掉公用属性,可以对私有属性赋值或者删除。同样unset也可以进行相同操作

构造器中对数据库增删改查

示例:

//方法委托实战:数据库查询构造器(链式查询)

classQuery

{

// 连接对象

protected$db;

// 数据表

protected$table;

// 字段列表

protected$field;

// 记录数量

protected$limit;

//对数据赋值处理

public$updates;

// 构造方法: 连接数据库

publicfunction__construct($dsn,$username,$password)

{

$this->connect($dsn,$username,$password);

}

//连接数据库

privatefunctionconnect($dsn,$username,$password)

{

$this->db=newPDO($dsn,$username,$password);

}

// 设置默认的数据表名称

publicfunctiontable($table)

{

$this->table=$table;

return$this;

}

// 设置默认的字段名称

publicfunctionfield($field)

{

$this->field=$field;

return$this;

}

// 链式方法: 设置查询数量

publicfunctionlimit($limit)

{

$this->limit=$limit;

return$this;

}

//设置条件

publicfunctioncondition($condition)

{

$this->condition=$condition;

return$this;

}

//设置内容

publicfunctioncontent($content)

{

$this->content=$content;

return$this;

}

//对数据库的增和改对数据表和值进行赋值处理

privatefunctionupdates()

{

$field=$this->field;

$content=$this->content;

$values=array_combine($field,$content);

foreach($valuesas$key=>$value)

{

$upd[]="{$key}='{$value}'";

}

returnjoin(",",$upd);

}

publicfunctiongetSql($value)

{

switch($value)

{

case'select':

returnsprintf('SELECT %s FROM %s LIMIT %s',$this->field,$this->table,$this->limit);

break;

case'update':

$this->updates=$this->updates();//将数据赋值处理

returnsprintf('UPDATE %s SET %s WHERE %s',$this->table,$this->updates,$this->condition);

break;

case'insert':

$this->updates=$this->updates();//将数据赋值处理

returnsprintf('INSERT %s SET %s',$this->table,$this->updates);

break;

case'delete':

returnsprintf('DELETE FROM %s WHERE %s',$this->table,$this->condition);

break;

default:

return'没有查询到的数据!';

}

}

// 执行查询

publicfunctionselect()

{

return$this->db->query($this->getSql('select'))->fetchAll(PDO::FETCH_ASSOC);

}

// 执行更新

publicfunctionupdate()

{

return$this->db->query($this->getSql('update'));

}

// 执行增加

publicfunctioninsert()

{

return$this->db->query($this->getSql('insert'));

}

//执行删除

publicfunctiondelete()

{

return$this->db->query($this->getSql('delete'));

}

}

classDB

{

publicstaticfunction__callStatic($name,$args)

{

//获取查询类的对象: new Query()

$dsn='mysql:host=localhost;dbname=mysqli';

$username='root';

$password='142536';

$query=newQuery($dsn,$username,$password);

returncall_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"


";

$result=DB::table('user')

->field('username')

->limit(10)

->select();

print_r($result);//输出查询

echo"


";

$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"


";

$result=DB::table('user')

->condition('Id > 335')

->delete();

print_r($result);

echo $result?'删除成功':'删除失败';

示例图:

f03eb2a6b189aab962fc962523a39c5c.png

总结:案例中使用了array_combine对数据进行赋值后传入SQL执行。改写了输入字符串为数组。对类的构造方法又进一步学习。重点在return $this、对多个方法串联到一起。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值