为了账号安全,请及时绑定邮箱和手机立即绑定

php 一個動作在兩個以上的地方用到,怎麼提出?

php 一個動作在兩個以上的地方用到,怎麼提出?

PHP
慕姐8265434 2019-01-29 21:51:01
給個假設A$do->query(        "INSERT INTO `abc` (           `public_order_id`,           `add_time`,           `status`         )         VALUES (           '{$public_order_id}',           '{$add_time}',           '已取消'         ) "       );B$do->query(        "INSERT INTO `abc` (           `public_order_id`,           `add_time`,           `status`         )         VALUES (           '{$public_order_id}',           '{$add_time}',           '已完成'         ) "       );假設我這個動作會用到的地方兩個以上但是唯一會變得就是 statusA是「已取消」B會變成「已完成」到其他地方又會有另外的狀態其他都一樣,那這樣的 mysql query 怎麼提出?原本想說放在 function 但是不行~想到一個問題假設如果要讓function 可以用外面的值我可以用 global 來讓外面的值進來 function但是如果他不是長這樣 $abc 而是這樣 $_SESSION['id'] 和 $oder['id'] 呢?$abc = 1;function XXX() {global $abc;echo $abc; // 可顯示}
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

如果你这全部都是手写 SQL 那就封装成对象,依赖一下 $do 就行了,即传参的时候把 $do 也传过去

function changeOrderStatus($do,$status,$public_order_id,$add_time){   return $do->query(        "INSERT INTO `abc` (
          `public_order_id`,
          `add_time`,
          `status`
        )
        VALUES (
          '{$public_order_id}',
          '{$add_time}',
          '已完成'
        ) "
      );
}

一般来说 上面这样就够了 ,但是从良好的实践出发,原则上一个方法的参数不超过两个,两个以上就应该当成对象处理,所以这里简单处理一下。

假定你的 add_time 就是取得当前时间,$status有默认值。

function changeOrderStatus($db,$params){    // 这里的 $db 最好做好 类型判断 判断
    if(!$db instanceof \PDO){        throw new \Exception('$db not a PDO object instance.');
    }
    $params = array_merge([        'status'=>'已完成',//status 默认值
        'public_order_id'=>null,        'add_time'=>date('Y-m-d H:i:s'),
    ],$params);    if(empty($params['public_order_id'])){        throw new \Exception('public_order_id is must.');
    }    return $db->query(
        vprintf('INSERT INTO `abc` (`public_order_id`,`add_time`,`status`) 
            VALUES ("%s","%s","%s");',
                $params['public_order_id']
                ,$params['add_time']
                ,$params['status']
        )
    );
}// CallchangeOrderStatus($do,[    'status'=>'已取消',    'public_order_id'=>1,
]);


查看完整回答
反对 回复 2019-01-29
  • 1 回答
  • 0 关注
  • 416 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信