On Wed, Jul 10, 2013 at 8:30 PM, Sara Golemon <poll...@php.net> wrote:
>> With regard to any sort of hinting, an issue of 'one of' return types
>> would need to be addressed (I hope).
>>
>> function foo(SomeClass $bar, int $baz) : bool, SomeClass {}
>>
>> Allowing for a failure (False) or a success (SomeClass).
>>
>> We (HHVM) deal with failure alternates by way of a "nullable" syntax:
>
> function foo(SomeClass $bar, int $baz) : ?SomeClass {}
>
> Means the function returns SomeClass or null.  null being the "failure"
> case.
>
> We also do "mixed" for anything (basically, no type hint, but explicitly
> stated), and "numeric" for a less aggressive float/int/numeric-string
> (though that's more specific to arg types than return types).
>
>
>
>>
>> I think it would useful to have a Null hint (like C's void I suppose).
>> More to do with explicitly saying no return type, rather than saying
>> nothing which means an undefined return type.
>>
>> function foo(SomeClass $bar, scalar $baz)  {} /** you can return
>> something, but who knows what will happen with it. **/
>> vs
>> function foo(SomeClass $bar, scalar $baz) : Null {} /** This method does
>> not return anything and to do so would be wrong. **/
>>
>>
> function foo() : void {} is our syntax.  A null return value is an actual
> thing (a null thing), whereas no return is more explicit.  I know that
> `return;` gets translated into `return null;` anyway, but we also look at
> the caller side (return_value_used) and warn about "attempt to use value
> from a function returning void" like C/C++ do.
>
>
> Another advantage of scalar is the ability to stop scalar only functions
>> from receiving objects, arrays, etc.. Currently no way to inhibit that
>> without type testing in the function.
>>
>> We don't currently do "any scalar", though we do have "numeric" (as
> mentioned above).  I agree with you that "scalar" would be a nice meta-type.
>
>
>
>> And, if PHP evolves to allow for __toScalar(), then an object can
>> represent itself as a scalar for those situations where the scalar type
>> hint is required. I think this may be a bit much initially though (unless
>> some clever bod has already worked all this out). Being able to cast an
>> instance from type A to type B via __autocast_XXXX where XXXX is the
>> resultant type ... ha ha ... OK that really is just pushing things. Maybe.
>>
>> Going off-topic here, but I worry that __toScalar() would collide in a
> messy way with __toString() (and other, future __toXXXX() behavior).  Not
> severely against it, mind you, but I think we (PHP) need to be cautious
> about going down that road.
>
> -Sara
>
> P.S. - Your reply only went to me, but I assume you wanted to include
> internals@ so I put them back in the To: line.

Thanks for your input Sara, everything sounds very interesting. In all
fairness I haven't looked at HHVM but I from what you described about
this particular feature sounds good.

Should I conclude that there's enough interest for this feature and
move from a gist to a RFC? If so, I would definitely need someone to
help out with the implementation.



Best regards,
Florin
----
Florin Patan
https://github.com/dlsniper
http://www.linkedin.com/in/florinpatan

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

Reply via email to