Hi Mike,
> On 15 Jan 2015, at 17:07, Mike Willbanks <[email protected]> wrote:
>
> I may not have described this clearly. If I make a library with a method that states an int,
> the declarative syntax now makes me have to take both due to your earlier comment on that userland
> would define the condition. This means that if I declared handling inside my library to be strict
> but the caller was in weak, I would need to handle that condition.
How, exactly, would you need to handle that condition? You don’t need to do anything yourself.
As the RFC itself says:
> In both approaches, the function will always get exactly the argument type it asks for. In the
> case of strict type-checking, this is done by rejecting incorrectly-typed values. In the case of
> weak type-checking, this is done by rejecting some values, and converting others. Therefore, the
> following code will always work, regardless of mode:
> function foobar(int $i) {
> if (!is_int($i)) {
> throw new Exception("Not an integer."); // this will never happen
> }
> }
No matter whether foobar() is called from strictly type-checked or weakly type-checked code, the $i
argument you get will always, without fail, be an integer. Thus, I do not see how you "would
need to handle that condition”.
> Now from that perspective I cannot rely that I am in strict and would have to handle the
> default weak even although I declared in my class that i wanted strict mode which only affected the
> code inside of that file. That's ultimately what I am saying and why I am stating it would
> have to handle both conditions. In reality, you'd always act as if you were in a weak mode
> supporting that case.
I… really don’t understand, I’m sorry. Are you complaining that if a caller uses the weak
mode, they are not bound by strict types? Why do you want to affect the code of the caller?
--
Andrea Faulds
http://ajf.me/