Uh oh!
There was an error while loading. Please reload this page.
Add Nette\Utils\Collection - #127
Conversation
From the user's point of view, why would/should one use this, compared e.g. to doctrine/collections (which are even more generic and actually behave like array thanks to ArrayAccess)? |
@dg Rebased @Majkl578 I don't use doctrine collections, but when I take a look at source... My collections used to look very similarly. Problem arises when you want to be strict on types. You cannot change the publicfunctionadd($element)
{
if (!$elementinstanceof Person) throw...
}
$people[$person->username] = $person;
# vs.$people->add($person);
$people[$person->username]
# vs.$people->get($person->username)
unset($person[$person->username])
# vs.# not implemented, I don't remove items one by one, usually by filter onlyAnd sometimes, IDE has a problem with "napovídání" (mi vypadl anglický termín) with ArrayAccess. |
JanTvrdik
commented
Jan 10, 2017
I don't think this belongs to nette/utils. |
@JanTvrdik Partially agree. The best would be native typed arrays in the PHP itself. Collection is a typical part of a model layer, Nette does not have such. This is helper only without big ambitions. Real world example how I use it: return People::fromIterator(
$this->dibi->query('...')->setRowClass(Person::class)
);But not just database. In one project, I'm listing firewall rules from router: $rules = newFirewall\Rules;
foreach ($this->switch->command(.....) as$line) {
$rules->add(Firewall\Rule::fromCliFormat($line));
}The point is, that working with typehint Btw. there used to be Collections in Nette, but this is different. |
d116328 to
3054b70Comparee2486c4 to
d9b729cCompare496a5dc to
622864eComparemilo
commented
Jan 18, 2017
Since its WIP, rebased to some old commit. |
3897bc7 to
b6341f0Comparemilo
commented
May 18, 2017
@dg Do you think it is a good idea to have it in the Utils? I'm using it literally everywhere and for comfort, I want to have it in a public repo. One possibility is to finish this PR (tests, doc, ...), or to create a |
JanTvrdik
commented
May 18, 2017
|
f3l1x
commented
May 21, 2017
I like an idea a lot. If it's not suitable for Please consider that. I could help you @milo with maintenance of course. Good job. 👍 |
8b993d6 to
98975bfCompare8aa61b9 to
fd48510Comparee2a373b to
a316b52Compare5ac6630 to
bc04e9fComparejosefsabl
commented
Oct 7, 2019
It is not Nette related at all, is it? I think that |
milo
commented
Oct 7, 2019
|
I'm using this abstract collection really often. Its purpose is to emulate typed array in most cases.
May seem to be strange that methods like
get()oradd()are missing. It is because of PHP invariance limitation.An example of basic usage:
Collection can declare frequent helpers on self:
And usage as typed array:
The
IteratorAggreageteis here for ordinary loops, like:The
ArrayAccessis not implemented. I tried that, but never found it useful.The
normalizeKey()method can convert complex types to scalar, for example for multi column primary keys in database. On the other hand, I overloaded it very rarely.If this would be accepted, I'll add tests and doc.