小编Den*_*nis的帖子

如何在几行代码中将大量数组键重构为对象属性?

我的代码看起来像这样(完整代码有47行):

$this->outline->value         = $row['value'];
$this->outline->some_value    = $row['some_value'];
$this->outline->specs         = $row['specs'];
$this->outline->second_marker = $row['second_marker'];
$this->outline->holes         = $row['holes'];
Run Code Online (Sandbox Code Playgroud)

如何在保持相同功能的同时缩小尺寸?

php refactoring

2
推荐指数
1
解决办法
122
查看次数

为什么MySQL中DISTINCT必须放在第一位?

我有一个查询,当我这样做时有效

SELECT DISTINCT(table.field.id), 1 FROM ... 
Run Code Online (Sandbox Code Playgroud)

但当我这样做时失败了

SELECT 1, DISTINCT(table.field.id) FROM ... 
Run Code Online (Sandbox Code Playgroud)

这是已知行为吗?

为什么第一个有效而第二个无效?

mysql sql distinct

2
推荐指数
1
解决办法
3459
查看次数

我可以使用SQL显示基于列值的自定义文本吗?

有没有一种方法可以根据列中的值显示不同的字符串?

SELECT value FROM table;

+--------+
| value  |
+--------+
|      1 |
|      0 |
|      1 |
|      1 |
+--------+
Run Code Online (Sandbox Code Playgroud)

我想要的输出是这样的:

+--------+
| value  |
+--------+
|    yes |
|     no |
|    yes |
|    yes |
+--------+
Run Code Online (Sandbox Code Playgroud)

怎么样?

mysql sql

2
推荐指数
2
解决办法
44
查看次数

业务逻辑是否存在于模型或控制器中?

在阅读https://softwareengineering.stackexchange.com/questions/165444/where-to-put-business-logic-in-mvc-design/165446#165446后,我仍然对要将代码放置在何处感到困惑计算折扣。我认为计算产品或服务的折扣价绝对是业务逻辑的一部分,而不是应用程序路由或数据库交互的一部分。因此,我正在努力将业务逻辑放在何处。

class Model
{
    public function saveService($options)
    {
        $serviceId = $options['service_id'];

        //Model reads "line Item" from database
        $service = $this->entityManager->find('Entity\ServiceLineItem', $serviceId);
        //uses the data to compute discount
        //but wait.. shouldn't model do CRUD only?
        //shouldn't this computation be in Controller?   
        $discount = ($service->getUnitPrice() * 0.25);

        // Add the line item
        $item = new SalesItem();
        $item->setDiscount($discount);
    }
}


class Controller
{
    function save()
    {
        $this->model->saveService($options);
    }
}
Run Code Online (Sandbox Code Playgroud)

题:

$discount计算之上,它应该留在模型中还是应该留在Controller中?如果进入控制器,则控制器必须先调用$service(通过模型),然后$discount在控制器内部进行计算,然后将其值发送回要保存的模型。那是这样做的方式吗?

注意

我可能会将模型与“存储”混淆。我可能需要一个执行业务逻辑的模型,而数据库/持久性存储应该是一个单独的层。

model-view-controller business-logic mvvm

1
推荐指数
1
解决办法
1462
查看次数

正则表达式可以接受12个数字,但第一个字符必须有X或数字

第一个字符是X或数字,其余11个数字.

例如:

898765432108 or 
X27654321987 
Run Code Online (Sandbox Code Playgroud)

我虽然: ^[x-X][0-9]{11}$

什么是解决方案?

regex

1
推荐指数
1
解决办法
61
查看次数

扩展受保护的类变量并将其标记为私有后,为什么会得到“必须保护或保护访问级别的权限”?

abstract class AbstractController
{
    protected $repository;
}

class GraphController extends AbstractController
{
    private $repository;
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

致命错误:对GraphController :: $ repository的访问级别必须受保护或较弱

为什么?这背后的理论是什么?在某种程度上,当我扩展一个类时,我对类属性(即公共)的访问级别较弱是一种错误的感觉,因为我在某种程度上暴露了父类意味着更严格的变量...

php inheritance access-levels

1
推荐指数
2
解决办法
4815
查看次数

我可以强制PHP内爆函数打印字符串值周围的引号吗?

$axisLabel = array(
    "HI",
    "MOM"
);
echo implode(',', $axisLabel);
Run Code Online (Sandbox Code Playgroud)

打印:

HI,MOM
Run Code Online (Sandbox Code Playgroud)

我想要

"HI", "MOM"
Run Code Online (Sandbox Code Playgroud)

我需要引号值来将值插入JavaScript

javascript php

1
推荐指数
1
解决办法
63
查看次数

如何为使用实时数据库数据的方法编写 PHP 单元测试?

我究竟如何为使用实时数据库的方法编写测试?

考虑这个代码:

class PricingRepository extends GenericRepository
{
    public function getOptionPrice(int $productId, int $quantity, float $productPrice = 0.0): float
    {
        //retrieves option record for a given product
        $row = $this->getMySql()->paramQuery("
            select * from pricing
            where product_id = ?", array(
            $productId
        ))->getSingleArray();

        //based on pricing type computes appropriate value
        if ($row['pricing_type'] === 'Quantity-based')
            return $row['base'] + $row['amount_per_quantity'] * $quantity;
        if ($row['pricing_type'] === 'Percentage-based')
            return $productPrice * $row['percentage'];

        throw new \InvalidArgumentException("invalid pricing type detected");
    }
}
Run Code Online (Sandbox Code Playgroud)

我有很多像上面那样的方法,所以我想确保我的测试是可靠的,并且不会在数据库数据发生变化时发生变化。我正在寻找关于一流单元测试方法的建议/解决方案,以及一种可能不依赖于数据库中数据更改的方法。

我现在编写一个简单的单元测试的方式可能是这样的:

use PHPUnit\Framework\TestCase;
class OptionPricingTest extends …
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing php-7

1
推荐指数
1
解决办法
3971
查看次数

在xargs命令中将不同的正则表达式组合在一起

我有这两个正则表达式:

find ... | xargs perl -pi -e 's/\t/    /g'
find ... | xargs perl -pi -e 's/[^\S\n]+$//g'
Run Code Online (Sandbox Code Playgroud)

第一个将标签更改为4个空格,第二个删除每行末尾的任何尾随空格.

我很想把两者结合起来,但又不想打破一些东西.此外,他们正在做不同的事情 - 一个是添加空格,另一个是删除空格.有没有一种安全的方法将这两者合并在一起或者只是将它们保持原样?

regex bash perl

0
推荐指数
1
解决办法
273
查看次数

在C++,PHP,其他语言中使用它

为什么C++中的内部类变量可以使用this,但不必,而内部PHP类属性必须使用$this->

示例C++(可以使用this,但不必)

void setHealth(int h)
{
    health = h;
}
Run Code Online (Sandbox Code Playgroud)

示例PHP(必须使用$this->)

public function setHealth($h)
{
    $this->health = $h;
}
Run Code Online (Sandbox Code Playgroud)

$this->PHP中是否有任何优缺点?我可以看到,它毫无疑问地澄清了变量确实属于这个特定的类实例,而不是可能是本地范围的变量,但C++在没有这个要求的情况下管理得很好...

php c++ static-typing this dynamic-typing

0
推荐指数
1
解决办法
53
查看次数

如何在HTML表格中通过CSS为TD单元边框的所有4个边添彩?

我有这个代码,我试图用红色为TD单元格的所有4个边上色,但是如果你运行代码,只有底部和右边框变色(在Mozilla Firefox中).有没有办法为所有4个边框上色?

#selections_table table {
  border-collapse: collapse;
}

#selections_table td,
th {
  border: 1px solid black;
  padding: 3px 4px 3px 4px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="selections_table">
  <table>
    <tbody>
      <tr>
        <th>#</th>
        <th>Model</th>
      </tr>
      <tr>
        <td>1</td>
        <td style="border-color:red">XXX-8</td>
      </tr>
    </tbody>
  </table>
</div>
Run Code Online (Sandbox Code Playgroud)

这个问题/答案没有帮助:CSS Border在一行中声明4个边,颜色,宽度

如果有一种方法可以通过类来设置它,那么这将比使用内联样式命令更好.

html css

0
推荐指数
1
解决办法
320
查看次数

当重载父方法时,为什么 PHP8.1 改为弃用不兼容的返回类型?

我像这样重载了类query的方法:mysqli

class MySql extends \mysqli
{
    function query(string $sql): ?MySqlResult  // line #30
    {
        $result = parent::query($sql);
        return new MySqlResult($result);
    }
}
Run Code Online (Sandbox Code Playgroud)

在 PHP8.0 中这不是问题。但是,从 PHP8.1 开始,我现在收到此错误:

已弃用: 的返回类型Repository\MySql\MySql::query($sql, $resultmode = null)应与 兼容mysqli::query(string $query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|bool,或者#[\ReturnTypeWillChange]应使用该属性暂时抑制repository\src\MySql\MySql.php第 30 行中的通知

我知道如何修复错误 - 我可能最终会更改方法的名称,因为我想返回我自己的自定义对象。

问题

我正在寻找一个答案,从理论和面向对象的角度来捕捉这种变化的需要,也许使用语言理论,或者将其与其他语言进行比较。

为什么需要进行此更改?进行此更改的必要性或原因是什么?在扩展类时,有什么方法可以允许 PHP 中重载返回类型?

php oop language-concepts deprecation-warning php-8.1

0
推荐指数
1
解决办法
1248
查看次数