2016-03-06 09:16:54 2605次浏览 5条回答 1 悬赏 500 金钱

我看有很项目中在完成一些数据库操作时用的是静态方法完成的。

就是说在ActiveRecord的子类里增加一个静态方法,然后再Controller里直接用 Class::function形式调取。

举个例子:

比如有个User类,对应数据库中User表,

Class User extends ActiveRecord
{
    public static function addUser($username.$password)
    {
         //写一些sql插入这条记录
    }
}

然后再Controller里直接用

User::addUser($username.$password)

这样的方式调用可以么?有不安全的地方么?因为我了解到的,静态方法是属于类的,如果两个请求同时调了这个方法,会冲突么?虽然我写了些测试代码,没有发生冲突的情况,但是我还是不放心,因为之前写别的的时候都是new 一个普通对象,然后调对象方法实现的,还没这么用过,不怎么放心。

另外就是 还有没其他的问题。

大家平时都怎么用的呢?

最佳答案

  • ╃巡洋艦㊣ 发布于 2016-03-06 09:56 举报
    User::addUser($username.$password)
    

    应该是两个参数吧:

    User::addUser($username, $password)
    
    3 条回复
    回复于 2016-03-06 11:07 回复

    哦哦 写错了,应该是逗号。具体的意思就是这种直接调静态方法没啥问题吧

    回复于 2016-03-06 12:13 回复

    这样写没问题,如果存在多次调用的话,这样写还是很方便。

    回复于 2016-03-06 14:28 回复

    哦哦,感谢回复。可能编码风格上不太好,但是只要不会引起BUG,就先这么写着了,再次感谢!

  • 回答于 2016-03-06 10:03 举报

    个人觉得,不是说不能这么做,而是可以直接使用yii提供的增删改操作

    $user = new User();
    $user ->name = 'Qiang';
    $user ->save();           // 一行新数据插入 User表
    

    使用原生sql语句:

    $db->createCommand('INSERT INTO User (name) VALUES (:name)', [
        ':name' => 'Qiang',
    ])->execute();
    

    要多看看文档:http://www.yiichina.com/doc/guide/2.0/db-active-record
    框架这个东西,应该灵活应用,不是说就不能一定怎么做,一定就要那么做,没有这个硬性要求。

    2 条回复
    回复于 2016-03-06 11:09 回复

    您的意思是在controller里直接这么写?
    我不是这个意思,在那个静态方法里 该用原生sql用原生,改用yii提供的增删改操作就用,
    主要是调取那个方法用静态方式行不行
    就是说问题不在active-record

    回复于 2016-03-06 15:42 回复

    这样写没有问题,其实你的问题应该是静态方法如何使用,跟yii好像就没有多大的关系了。那你了解下静态方法的使用以及场景,就知道了。

  • 回答于 2016-03-11 16:54 举报

    函数式写法,不建议学习

  • 回答于 2016-03-16 00:57 举报

    应该保持OO的写法,static fun意义不大,更多的我们会用这个思维来做一些tools

    如果调用频繁可以考虑

    $user = new User();
    $user->createNew($user, $pass); //do pass encode and blabla in class instant.

  • 回答于 2016-04-10 12:47 举报

    我想你去理解下什么是MVC,这是一种思想,
    数据打交道的教给M。C是控制逻辑,本来M要做的事,你给C做,虽然结果可行。但是脱离了MVC的思想

    2 条回复
    回复于 2016-04-12 09:29 回复

    我没交给C去做啊

    回复于 2016-04-14 10:28 回复

    哦,我没看仔细。

您需要登录后才可以回答。登录 | 立即注册
kissgxd
总监

kissgxd

注册时间:2015-06-09
最后登录:2019-05-07
在线时长:26小时5分
  • 粉丝3
  • 金钱3810
  • 威望30
  • 积分4370

热门问题