> Am 26.04.2016 um 19:41 schrieb Niklas Keller <m...@kelunik.com>: > > 2016-04-26 19:33 GMT+02:00 Bob Weinand <bobw...@hotmail.com > <mailto:bobw...@hotmail.com>>: > > Am 26.04.2016 um 19:00 schrieb Niklas Keller <m...@kelunik.com > > <mailto:m...@kelunik.com>>: > > > > 2016-04-26 16:58 GMT+02:00 Bob Weinand <bobw...@hotmail.com > > <mailto:bobw...@hotmail.com>>: > > > >> Yeah, I'd like to not allow ?Foo in any case if union types pass. > >> > > > > What's the reason for that? To me, null is neither a type nor should it be. > > I don't want to argue that now, but null most definitely IS a type. It is the > null type with a single value, null, whose semantics is to represent the > absence of any other value. > > There's also plenty of evidence in PHP that null is considered a type: > get_type(), https://php.net/null <https://php.net/null>, has it's own is_* > function etc. > At least in the PHP ecosystem it is considered its own type. Other type > systems may not, but the one of PHP does. > > Thus, we are definitely considering it as a type - a question for you: What's > the type of the value null then, if not null? > > I'd say it's special and doesn't have a type at all. No value, no type. > > If we wouldn't make a distinction between null and an object (i.e. allow null > to be passed to a function(Foo $foo) {}), it could be considered a supervalue > of type object. But that's not the case. > > If null doesn't have a type, it's clear that it can't be passed to a > function(Foo $foo) {}.
There's undefined (= not a value) and there's the value null. We just don't expose undefined to userland. [You see it when accessing undefined variables, which PHP converts to null with a notice for example.] Null is definitely a value. You can pass it around, reflect on it, assign it etc.. And as it is a value, it also has a type, which is null. Null is not special, it just has specific behavior, like any other primitive type has. The only special thing is that it's allowed as a default value with function (Foo $foo = null), but this should be somewhen deprecated and removed once we have proper null unions. If you want to continue arguing, please open a new thread, but don't side-track this thread to much, please. Bob