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 = ‘[email protected]‘; 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 = ‘[email protected]‘;//设置的email是保护的 64 print_r($userModel); 65 66 unset($userModel->email); 67 print_r($userModel); 68 //echo $usermodel->add(); 69 ?>
时间: 2024-10-11 03:54:42