我的代码看起来像这样(完整代码有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)
如何在保持相同功能的同时缩小尺寸?
我有一个查询,当我这样做时有效
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)
这是已知行为吗?
为什么第一个有效而第二个无效?
有没有一种方法可以根据列中的值显示不同的字符串?
即
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)
怎么样?
在阅读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
在控制器内部进行计算,然后将其值发送回要保存的模型。那是这样做的方式吗?
注意
我可能会将模型与“存储”混淆。我可能需要一个执行业务逻辑的模型,而数据库/持久性存储应该是一个单独的层。
第一个字符是X或数字,其余11个数字.
例如:
898765432108 or
X27654321987
Run Code Online (Sandbox Code Playgroud)
我虽然: ^[x-X][0-9]{11}$
什么是解决方案?
abstract class AbstractController
{
protected $repository;
}
class GraphController extends AbstractController
{
private $repository;
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
致命错误:对GraphController :: $ repository的访问级别必须受保护或较弱
为什么?这背后的理论是什么?在某种程度上,当我扩展一个类时,我对类属性(即公共)的访问级别较弱是一种错误的感觉,因为我在某种程度上暴露了父类意味着更严格的变量...
$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
我究竟如何为使用实时数据库的方法编写测试?
考虑这个代码:
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) 我有这两个正则表达式:
find ... | xargs perl -pi -e 's/\t/ /g'
find ... | xargs perl -pi -e 's/[^\S\n]+$//g'
Run Code Online (Sandbox Code Playgroud)
第一个将标签更改为4个空格,第二个删除每行末尾的任何尾随空格.
我很想把两者结合起来,但又不想打破一些东西.此外,他们正在做不同的事情 - 一个是添加空格,另一个是删除空格.有没有一种安全的方法将这两者合并在一起或者只是将它们保持原样?
为什么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++在没有这个要求的情况下管理得很好...
我有这个代码,我试图用红色为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个边,颜色,宽度
如果有一种方法可以通过类来设置它,那么这将比使用内联样式命令更好.
我像这样重载了类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 ×6
mysql ×2
regex ×2
sql ×2
bash ×1
c++ ×1
css ×1
distinct ×1
html ×1
inheritance ×1
javascript ×1
mvvm ×1
oop ×1
perl ×1
php-7 ×1
php-8.1 ×1
phpunit ×1
refactoring ×1
this ×1
unit-testing ×1