Hi Facundo Martínez, I think the best solution to yourself described problem above would be the Null Object Design Pattern (https://en.wikipedia.org/wiki/Null_Object_pattern). In my opinion, NULL belongs to PHP and this language never aimed to become Java or similar.
Jakub On 22 March 2016 at 01:34, Facundo Martinez Correa <fnmartine...@gmail.com> wrote: > Hello, > > I am reaching you in order to obtain feedback on this RFC proposal. > > I have been playing with PHP 7 for a project in the company that I am > currently working for. One of the many drawbacks that I saw in PHP was the > there were no types. With type hinting I had confindence again in PHP. With > return type hinting a wasn't able to resist to try it. So here I am, making > a whole new platform entirely in PHP 7, using type hints in everything. > Arguments and returns alike. Given my tendency to language purity imagine > my surprise when my code inadvertently tryied to sneak a NULL into a method > expecting an object... And failing thanks to strictness in object and null > treatments in the new PHP 7. "SWEET!" I yelled. > > Now imagine my dumbfoundedness when a Repository of mine tryed to return a > NULL, and because it ought to return have returned a User, it threw a > TypeError. At first I said "sweet." But then I realized the problem. There > are many times where we need uncertainty. Code is a reflection of reality, > and as such, it must reflect uncertainty. NULL is a good enough way to > express nonexistence, albeit a bad one. We have been using it in code for > years, but it is also used to say many things. Things that cause > uncertainty in the code. I receive a null, does it mean it doesn't exists? > That it will exist? Should I allow it? Is it a good value? I for sure don't > know. And in my experience, I have used it for many of those cases. And in > many situations that I'm not proud of, all of them at the same time. > > So I want to "return a NULL". I want to express uncertainty, a > nonexistence. But I want to express that I will return something. And I > want to have this NULL checking at interpretation time. I want everything, > and none of the drawbacks. As we say here in Argentina, I want the bread > and the cake. What can we do to have it? After a bit of thought the Maybe > monad came to me. > > My experience in Haskell reminded me of this. To have a structure than > represents uncertainty, is the best way to take away the responsibility > from NULL. To express it in no other way. But my experience in Java has > taught me that Optional of something is not a good way to tackle the > problem. I still have to check if my Optional isEmpty. I still have to > check for null. That is because Java has that type erasure after > compilation time that doesn't allow me to play nice with polymorphism. But > maybe PHP can. Maybe PHP will give me the polymorphism at execution time to > discern an empty Maybe from the one that is not. So I don't have to check > for null ever again in my life. So my code can be free of nulls. So I can > express uncertainty and nonexistance, while I return a User from my > repository. > > I hope someone would like this idea. I'm also open to suggestions. > Kind regards > Facundo Martínez -- Cheers, Kubis -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php