小编koe*_*oen的帖子

组合:避免多个嵌套的foreach

当您需要检查/拥有数组元素的组合时,如何避免嵌套foreach?

示例代码:

$as = array($optionA1, $optionA2)
$bs = array($optionB1, $optionB2)
$cs = array($optionC1, $optionC2)

foreach ($as as $a) {
    foreach ($bs as $b) {
      foreach ($cs as $c) {
          $result = $this->method($a, $b, $c);
          if ($result) etc
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有其他办法可以避免筑巢的人?

php foreach nested nested-loops

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

视图层的“getter 和 setter 是邪恶的”是否失败?

很多人都知道这篇文章:更多关于 getter 和 setter。我认为它在描绘 getter/setter 的邪恶方面做得很有说服力。我还通过尝试将现有项目(未完成)转换为没有 getter/setter 的代码来测试它。有效。代码可读性大大提高,代码更少,我什至设法摆脱了最初认为它们确实有必要的 getter/setter。除了一处。

让模型进入视图部分是我认为这种方法没有抓住要点的地方。在文章中作者使用构建器导出模型。问题是:对放入构建器的内容的控制与使用 getter 获得的内容一样多。是的,它隐藏了实现,即它在模型中的表示方式。但是 getter 并没有从模型中取出与放入其中的非常不同的东西。如果您创建一个通过构造函数传递 '5' 的 Money 对象,money.getAmount() 将不会将此转换为其他货币或作为其中包含一个元素 '5' 的数组返回。

你设置什么就得到什么。通过视图,我们设置了值,以及当我们从一个应该保存我们首先设置的对象的对象中询问(获取)这些值时我们期望的值。导出这些的构建器只是期望相同。

这个问题有点长。但我想在我的观点上受到挑战。将模型数据传输到视图层的 getter 和 setter 是否邪恶?

有很多人认为 getter/setter 根本不是邪恶的。这也不是我想听到的辩护,因为我认为他们在我提到的其他地方确实是邪恶的。

oop model-view-controller getter setter encapsulation

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

行为驱动开发是关于设计还是分析?

我读到的关于BDD的内容越多,以及它应该如何改进TDD,这对我来说就更加混乱了.我发现专家的引言说它是关于设计的,但也有其他专家说这是关于分析的.

我目前看到它的方式是这样的:

1)分析:BDD

来自维基百科

面向对象分析的结果是以概念模型的形式描述系统在功能上需要做什么.

所以在BDD之后我们有了要求(故事和场景).但我不确定概念模型部分.

2)设计:例如使用CRC卡的可靠性驱动设计等工具

3)代码:编码设计,可选择使用测试(就像他们所说的TDD做错了,我也觉得有用)

我怎么看错了?我现在很难看到森林穿过树林.

oop tdd bdd object-oriented-analysis

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

闭包如何帮助创建 DSL/fluent 接口:PHP 示例?

你能给我举个例子,在 PHP 中,展示闭包如何有助于创建 DSL(流畅的接口)?

编辑:以下问题中接受的答案讲述了嵌套闭包。如果有人可以将该示例转换为 PHP,那也会有帮助: 流畅的界面经验?我需要你的意见!

php dsl closures fluent-interface

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

vim - 在没有箭头键的情况下将光标移动到插入模式

我试图进入通常建议不使用箭头键而只使用hjkl键的习惯.现在我经常发现自己处于以下情况.我刚打字

someFunction()
Run Code Online (Sandbox Code Playgroud)

并且光标在(和之间处于插入模式).接下来我只需要打字;

someFunction();
Run Code Online (Sandbox Code Playgroud)

然后按esc完成.按右箭头键可能是最简单的,但开始感到尴尬,需要太多时间才能完成操作.另外一些人禁用他们的箭头键以养成不使用它们的习惯.在这种情况下,是否有比击打更快的东西esc,shift-A或者右箭头键是否最快?

vim

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

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

建模和责任

假设您要在应用程序中创建银行帐户模型.您可以创建一个类BankAccount来执行典型的银行帐户.但是如果你被问到班上的责任是什么,答案是什么?"像银行账户一样?" 那不是很具体.我对建模和责任之间的关系有点困惑.许多"现实世界"的物品似乎没有明确的责任.

什么是开始建模这些概念并保持明确责任的最佳方式?

oop

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

$ this在回调函数中

我想知道为什么这样有效:

class Foo {
    public function doSomethingFunny($subject) {
        preg_replace_callback(
            "#pattern#",
            array($this, 'doX'),
            $subject
        );
    }
    private function doX() {
        echo 'why does this work?';
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么回调仍然在$ this的上下文中?我希望它只允许公共方法.我错过了回调如何工作的基本内容.

php object callback

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

私有分支的版本控制?

虽然我知道您可以使用第二个存储库进行备份,或者创建名为"privateBranchOfXcompletelyBrokenBackupOnly"的分支,但我很想知道本地支持远程私有分支的版本控制系统.

编辑:忘了告诉它应该远程私密.似乎只是镜像推送到私人回购模仿这个.

cvs version-control

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

在这种情况下如何替换instanceof?

我想比较compareCriteria.简单的比如'between'和'inArray'或'greaterThan'.我对这些类使用多态.他们从compareCriteria接口共享的一种方法是'matchCompareCriteria'.

我想避免的是让每个班级检查他们应该匹配的compareCriteria的类型.例如,inArray对象将检查matchCompareCriteria是否传入inArray对象,否则它将返回false,如果它知道如何比较.

也许在这种情况下,instanceof是完全合法的(对象知道自己),但我仍然在寻找避免它的可能方法.有任何想法吗?

伪代码示例:

betweenXandY = create new between class(x, y)
greaterThanZ = create new greaterThan class(z)
greaterThanZ.matchCompareCriteria(betweenXandY)
Run Code Online (Sandbox Code Playgroud)

如果X和Y大于Z,它将返回true.

编辑:

1)instanceof就是我现在所看到的,匹配matchCompareCriteria方法.我想摆脱它

2)matchCompareCritera检查另一个是否包含compareCriteria.如果一个的所有可能值都包含在另一个中,则返回true.对于compareCriteria的许多组合,比较它们甚至没有意义,因此它们返回false(比如betweenAlfa和betweenNum之间是不兼容的).

oop polymorphism criteria instanceof

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