Hello
​ ​
Php Internals,

I was wondering today why did we not have (yet ?)​
​ ​
a Collection type in Php ?
Typically what would be that kind of variable type ?

This type would be a great intermediate between an array and an Object.
Today, in my opinion we are seeing to much wrong uses of php Object.
To quote one of the most used: The Doctrine Collection object.
These kind of object are IMO very memory-greedy ones.

The implementation idea would be to have a new variable type:
The Collection.
The Collection is Iterable, Traversable, Countable like an array to be
compatible with foreach and other Traversable-compatibles functions.
The Collection become a type on it's
​ ​
own, so there's a lot of changes to be considered:
- The serialization
- The vardumping/exporting
- The Exception traces
- The backtrace

To be syntaxely compliant to array and object it would be case insensitive
even if i would like to prefer it Camelcased: Collection. This is up to you.
The target is Php 8, but the reserved word could be introduced in php 7.3.

Here's are very basics implementation concepts:

/**
 * Standard var declaration
 */
$collection = Collection(int);

/**
 * Alternative var declaration
 */
$collection = Collection(int, [1, 2, 3]);

// Throws nothing
$collection[]= 10;
$collection['abc']= 10;

// Throws CollectionTypeHintError
$collection = Collection(int, [1, '2', 3]);
$collection['abc']= '10';
$collection['abc']= new StdClass;

// Transtypes the collection to an standard array
$collectionAry = (array) $collection;

// Throws CollectionTypeReHintingError
$collection = (array) $collection;
$collection = 10;

// Throws nothing
unset($collection);
$collection = 10;


Now the +/-;

The +:
+ We have an optimized Collection type instead of those ugly Object-like
collections that are ressources-greedy.
+ Aside of the optimization, we have a well understandable type hint
reserved to the Collections. This is clearly a better
semantically-appropriated way to work with Collection data.


The -:
- Collection become a reserved word. Therefore, this could introduce a
major BC.


Cheers,
Georges.L

Reply via email to