Re: [RFC] Scalar Type Hinting With Casts (re-opening)
| From: | Pierre Joye | Date: | Thu, 24 Jul 2014 09:03:37 +0000 |
| Subject: | Re: [RFC] Scalar Type Hinting With Casts (re-opening) | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-75999@lists.php.net to get a copy of this message | ||
On Thu, Jul 24, 2014 at 10:52 AM, Pierre Joye <pierre.php@gmail.com> wrote:
> On Thu, Jul 24, 2014 at 10:42 AM, Patrick Schaaf <php@bof.de> wrote:
>> Hi,
>>
>> there is, it seems, something missing from both the RFC and the
>> discussion, as far as I read it. Sorry if it came up before, it was a huge
>> amount of mails...
>>
>> How does the proposal affect method compatibility between
>> subclasses and baseclasses? Will two methods there, differing in the
>> scalar type annotations of one of their arguments, elicit STRICT
>> warnings, like object type annotations do?
>
> I think it should behave like class arguments do.
I should be more precise :)
say:
function i(integer $i)
function f(float $f)
function s(string $s)
$i = 12;
$f = 1.234;
$s = "abcdef";
For integer arguments:
Works:
i($i);
Fails:
i($f);
i($s);
i(new StdClass);
float fails as the argument cannot be an integer without lost of
information. It is a mis-usage of this function argument and the
intend of the caller can only be guessed and can only lead to bugs.
For float:
Works:
f($i);
f($f);
integer is, if I take the class behavior as example, like a float,
same "interface", fully compatible.
Fails:
f($s);
i(new StdClass);
For string, every scalar should work as both float and integer are
easily converted to string, we can compare them to objects with a
__toString method. I could live with strict too here but implicit
string conversion makes sense here. Float precision setting is used
for the decimal precision.
Arrays and objects without __toString fails, obvioulsy.
Cheers,
--
Pierre
@pierrejoye | http://www.libgd.org