# 有时候觉得百度的文心一言还挺聪明

**URL:** <https://www.shiqidu.com/t/topic/810>\
**Category:** 开发调优\
**Tags:** PHP\
**Created:** [2024 年3 月 21 日 06:52 UTC](https://www.shiqidu.com/t/topic/810 "2024-03-21T06:52:22Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

作者： ![Eureka](https://www.shiqidu.com/user_avatar/www.shiqidu.com/eureka/32/5_2.png) [@Eureka](https://www.shiqidu.com/u/Eureka)\
发布日期： [2024 年3 月 21 日 06:52 UTC](https://www.shiqidu.com/t/topic/810/1 "2024-03-21T06:52:22Z")

</div>

## 问题

```php
if ($_POST['activityType'] == 1 && (empty($_POST['buyCount'][$i]) || empty($_POST['giftCount'][$i]) || $_POST['buyCount'][$i] <= 0 || $_POST['giftCount'][$i] <= 0)) {
	throw new Exception("分组买/送数量不能小于等于0");
}
if ($_POST['activityType'] == 2 && (empty($_POST['buyCount1'][$i]) || empty($_POST['giftCount1'][$i]) || $_POST['buyCount1'][$i] <= 0 || $_POST['giftCount1'][$i] <= 0)) {
	throw new Exception("分组买/送数量不能小于等于0");
} 

```

这段代码有没有bug，可不可以优化

## 答案

### 百度

这段代码在逻辑上没有明显的bug，但是有几个可以优化的地方：

1. 重复的代码：两个`if`语句块中的逻辑非常相似，只是变量名不同。你可以考虑将这部分逻辑抽象成一个函数，来减少代码的重复。

2. 变量命名：变量名`buyCount`和`buyCount1`，`giftCount`和`giftCount1`可能会导致混淆。如果它们代表不同类型的活动或分组，那么最好使用更具描述性的变量名来区分它们。

3. 异常信息：异常信息“分组买/送数量不能小于等于0”比较通用，可能无法准确反映问题所在。如果可能的话，可以考虑提供更具体的异常信息，例如指明是哪个分组的买/送数量有问题。

4. 代码可读性：可以考虑添加一些注释来解释这段代码的目的和逻辑，以便其他人更容易理解。

优化后的代码可能如下所示：

```php
function checkBuyGiftCount($activityType, $buyCount, $giftCount, $index) {
    if (empty($buyCount[$index]) || empty($giftCount[$index]) || $buyCount[$index] <= 0 || $giftCount[$index] <= 0) {
        throw new Exception("分组{$index}的买/送数量不能小于等于0");
    }
}

// 调用函数检查买/送数量
if ($_POST['activityType'] == 1) {
    checkBuyGiftCount($_POST['activityType'], $_POST['buyCount'], $_POST['giftCount'], $i);
} elseif ($_POST['activityType'] == 2) {
    checkBuyGiftCount($_POST['activityType'], $_POST['buyCount1'], $_POST['giftCount1'], $i);
}

```

在这个优化版本中，我创建了一个名为`checkBuyGiftCount`的函数，它接受活动类型、买/送数量的数组以及索引作为参数。然后，我根据`$_POST['activityType']`的值调用这个函数来检查买/送数量。这样，我避免了代码的重复，并提高了代码的可读性和可维护性。

* * *

### chatgpt

这段代码是用来检查用户在提交表单时是否输入了有效的买和送数量。它首先检查活动类型是否为1或2，然后检查对应的买和送数量是否为空或小于等于0。代码看起来是正确的，但可以进行一些优化，以减少重复代码。

你可以将重复的逻辑提取出来，这样可以减少代码量并提高可读性。例如，你可以将重复的部分提取成一个函数：

```php
function checkCounts($buyCount, $giftCount) {
    if (empty($buyCount) || empty($giftCount) || $buyCount <= 0 || $giftCount <= 0) {
        throw new Exception("分组买/送数量不能小于等于0");
    }
}

if ($_POST['activityType'] == 1) {
    checkCounts($_POST['buyCount'][$i], $_POST['giftCount'][$i]);
} elseif ($_POST['activityType'] == 2) {
    checkCounts($_POST['buyCount1'][$i], $_POST['giftCount1'][$i]);
}

```

这样做的好处是避免了重复的逻辑，使代码更易读和易维护。
