Re: Re: [RFC][VOTE] Nullable Types
| From: | Rowan Collins | Date: | Thu, 12 May 2016 12:38:47 +0000 |
| Subject: | Re: Re: [RFC][VOTE] Nullable Types | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-93273@lists.php.net to get a copy of this message | ||
On 12/05/2016 12:36, Lester Caine wrote:
On 12/05/16 11:21, Davey Shafik wrote:As I understand it, no existing code will change behaviour under this proposal. It merely adds an extra feature which libraries *can* use. What's more, it's a feature which makes those libraries *less strict*, not more. Existing code: function something(Bar $bar) {} something(new Bar); // OK something(); // Error: Missing required parameter something(null); // Error: Parameter is not of required type function something_else(Bar $bar = null) {} something_else(new Bar); // OK something_else(); // OK something_else(null); // OK None of this behaviour is going to change, no existing code will break. Now let's say the author of the something function decides to use the new nullable type hint: function something(?Bar $bar) {} something(new Bar); // OK something(); // Error: Missing required parameter something(null); // OK None of your code will be calling something(null) yet, because it was previously an error. So you now have an *extra* way of calling the function, but you don't need to change any existing usages. The only breaking change would be if the author of the something_else function decided to make the argument mandatory but nullable, so that "something_else()" would be an error, but "something_else(null)" wouldn't be. But that's just the same as if they made the argument completely mandatory - it's a breaking change in the library, not something the language change has caused to happen. Regards, -- Rowan Collins [IMSoP]E.g. the behavior of passing executing with a null value for the argument is something you should be consciously making a decision on, and passing in null explicitly.I was actually getting the logic wrong... the problem with this proposal is that I HAVE to add the '?' for many of my libraries to continue to work simply because they do handle the null case. So what was a working system is broken by this change.