看看Pimple源代码,我发现它将对象及其id存储在两个不同的数组中:
class Container implements \ArrayAccess
{
private $values = array();
...
private $keys = array();
}
Run Code Online (Sandbox Code Playgroud)
然后:
public function offsetSet($id, $value)
{
...
$this->values[$id] = $value;
$this->keys[$id] = true;
}
Run Code Online (Sandbox Code Playgroud)
最后:
public function offsetGet($id)
{
if (!isset($this->keys[$id])) {
throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id));
}
}
Run Code Online (Sandbox Code Playgroud)
我也看到了在惠尔康源代码类似的东西在这里.
我的问题是为什么要分别存储对象id键,为什么不if (!isset($this->values[$id]))呢?在数组中搜索更快吗?我做了一些测试,似乎搜索速度非常相似.
我正在尝试在我正在使用的应用程序中使用DDD.我有一个以下UserAggregate结构:
UserAggregate
- ProfileEntity
- ImageEntity
- RatingEntity
Run Code Online (Sandbox Code Playgroud)
我有一个UserRepository,它正在查询实体映射器以构建UserAggregate.
现在我想将UserAggregate传递给UserRepository以保持持久性,就像UserRepository->save(UserAggregate).如何告诉UserRepository UserAggregate子实体已更改并需要保存?那有什么共同的模式吗?我知道UintOfWork模式,但无法想象它对孩子们有什么帮助,因为我只想在实际更改子实体时才能访问映射器(和数据库).
有没有办法跟踪实体对象的"脏状态",特别是在PHP中?或者我错过了聚合根和存储库的概念?
I'm trying to setup several cron jobs on VPS under centos/whm. I've added to /var/spool/cron/root following lines:
*/5 * * * * find /some-dir/* \( ! -iname ".ht*" \) -delete
*/10 * * * * find /some-other-dir/* \( ! -iname ".ht*" \) -delete
Run Code Online (Sandbox Code Playgroud)
但只执行了第一行(对于 /some-dir/)。如果我交换行 - /some-other-dir/ 执行,/some-dir/ - 不是。我试图在每行的末尾放置分号,放置空格,制表符,更改文件编码 - 什么都没有。
如何让 cron 处理这两个任务?
这是 /var/log/cron 输出:
Sep 18 11:05:01 host crond[3302]: (root) CMD (find /some-dir/* \( ! -iname ".ht*" \) -delete)
Sep 18 11:10:01 host crond[3303]: (root) RELOAD …Run Code Online (Sandbox Code Playgroud)