2026-10-29 23:15:05
一,你的问题好多呀,才给五分。
二,回答问题1。
概念上你已经清楚了,可能是还没有具体了解。
我给你举点例子吧。然给你深入理解下Model的应用-----对于良好封装的模型,他的作用不仅仅是简单的过滤,验证啥啥的。
好了,我们先来假设一个应用,用户登录吧。
那么,你首先应该有一个数据表吧,比如就是my_user。然后。一般的,你要实现这样一个操作。
用户登录,用户退出,用户注册。然后,重点来了,获取多个用户的详细资料(还有其他的,比如获取用户好友啊什么的,这里就不深入了讨论了)。那么,你的Action,可能会这样写。
假定这个Action是UserAction---->文件名UserAction.class.php
//登录
public function login(){
//操作代码暂时省略
}
//登出
public function loginout(){
//省略
}
//获取详细资料
public function getPorfiles($ids){
//然后我想说的是这里。
//在这个UserAction里,你是不是需要查询一次数据库。来获取用户的详情。?
假定,我们这个使用的查询语句
$sql_manytimes="select * from my_user .....";
}
然后,你的应用里,假设还有另外一个操作,比如是博客Blog吧。即BlogAction
//读取文章
public function read(){
//在显示文章的时候
//在这里。你需要获取多个评论用户的详细信息。(普通通的连接运算已经不“划算”的情况)//这是你是不是有需要进行UserAction中的getProfiles中的,同样的,数据库查询了?
即:$sql_manytimes
}
然后,当你的项目很大的时候。。如果继续这样下去
你是不是会多次重复的$sql_manytimes。。。
然后当,你想更改这个$sql_manytimes是不是需要到处去修改。。?
问题出来了,那么作用就出来了。这个时候,就有了Model了。
你可以这样。定义一个
class UserModel extends Model{
public function getPorfiles($ids){
这里来处理获取用户信息的查询。
}
}这样。你每次在Action调用的时候。
就都可以使用
D('User')->getProfiles($ids);了。
小结:模型的优点体现在封装、复用、可移植上面。如果你项目小,是可以把东西Action里面。
项目大的时候,model的作用就提现出来了。
我给你举的例子还不是很好,篇幅有限,不多说了。想聊发私信。
三,问题2.
你的思路很好,也看得出你是比较爱钻研的。只是对OOP的继承,没有理解的很好。我同样给你举个例子。
你定义一个BaseAction 在里面顶一个删除操作。
比如
class BaseAction extends Action{
public $m;
public function delete(){
$map[$this->m->getPk()]=array('eq',$_GET['id']); //数据过滤我就不做了
//$this->m->getPk();获取模型的主键。$map类似等效于
//$map['id']=array('eq',$_GET['id']);
$this->m->where($map)->delete();
dump($this->m->getLastSql());//打印出查询语句,方便后面测试
}
//类似的写法可以有ADD,EDIT,等
}
//然后你的另外的操作。比如是BlogAction则继承BaseAction即可
class BlogActon extends BaseAction{
public function _initialize(){
$this->m=D('Blog');//z这个$this->m。就是Base中的那个$m;
}
}
现在。你去尝试访问地址
..../Blog/delete/id/1111
试试。。【它会执行,删除】 。然后打印出
...delete from my_blog where id=1111 ...