There are a RFC for union-types (https://wiki.php.net/rfc/union_types)
that was declined, but I see that it is a recurring question here
(today, for instance, David Eddy tried to start this discussion again
with the same concept).

Then, I don't know if the problem is the union methodology like
string|int or if it could be useless.

In my mind, I think that is very useful, mainly over scalar types
(string|int, for instance) or when method could support mixed types of
objects. For instance, I have a method called mergeWith($value) that
allows $value to be instanceof array or self. Currently I am solving
this problem by using assert(), something like assert(is_array($value)
|| $value instanceof self), but I see that is not the best option.

In this case, I suggests to create a super-type that allows to define
a super-type (typedef) or inline super-type (union-types).

class {
    typedef MyType (self, array);

    public function mergeWith(MyType $value) {
    }
}

Or, following the union-types (as inline super-type):

public function mergeWith(types(self, array) $value) {
}

public function anotherMethod(): types(self, array) {
}

-- 
David Rodrigues

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to