码迷,mamicode.com
首页 > Web开发 > 详细

php之魔术方法在框架的应用

时间:2015-07-24 12:22:03      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

 1 <?php
 2 /***
 3 按以前的做法,把POST来的数据,拼接sql,然后查询
 4 但是在thinkphp中的做法,是把收到的数据,赋值给了一个对象的属性
 5 然后对象->add()方法,就写入到数据库类了,很方便
 6 
 7 思考:
 8 1:userModel()就有username属性供你赋值吗
 9 2:如果$userModel->xyz属性是保护的,
10 而我的表,又有一个字段,恰好叫xxx,那么自然是$user->xyz = $_POST[‘xyz‘];
11 这不就出错了吗?
12 3:userModel有一些属性,很正常,比如有5个属性a,b,c,d,e
13 在注册时,又动态设置了属性f,g,h,i,j
14 疑问:在拼接sql时,要把a,b,c,d,e忽略掉才行,又怎么忽略
15 
16 答:用魔术方法解决
17 
18 
19 通过__set()魔术方法把属性的设置都放到数组里
20 处理时,专门处理这个属性就可以了
21 这样,就不会和其他属性相冲突
22 
23 
24 TP中的一段用户注册代码
25 $userModel->username = $_POST[‘username‘];
26 $userModel->email = $_POST[‘email‘];
27 if ($num = $userModel->table(‘user‘)->add()) {
28     echo ‘注册成功‘;
29 }else {
30     echo ‘fail‘;
31 }
32 ***/
33 
34 class UserModel{
35     protected $email = ‘useremail@163.com‘;
36     protected $data = array();
37     public function __set($k,$v){
38         $this->data[$k] = $v;//当想设置一个属性时,触发__set(),把属性名和属性值两个参数放到一个数组中 
39 
40     }
41     public function __get($p){
42         return isset($this->data[$p]) ? $this->data[$p] : NUlL;
43     }
44     public function __unset($p){
45         unset($this->data[$p]);
46     }
47     public function __isset($p){
48         return isset($this->data[$p]);
49     }
50     public function add(){
51         $str1 = implode(‘,‘,array_keys($this->data));
52         $str2 = implode("‘,‘",array_values($this->data));
53         $sql = "insert into table ($str1) values (‘$str2‘)";
54         return $sql;
55     }
56 }
57 echo ‘<pre>‘;
58 $userModel = new UserModel();
59 print_r($userModel);
60 
61 
62 $userModel->username = ‘lisi‘;//设置的username是不存在的
63 $userModel->email = ‘lisi@126.com‘;//设置的email是保护的
64 print_r($userModel);
65 
66 unset($userModel->email);
67 print_r($userModel);
68 //echo $usermodel->add();
69 ?>

 

php之魔术方法在框架的应用

标签:

原文地址:http://www.cnblogs.com/museluo/p/4673008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!