On Wed, 25 Feb 2015 16:55:57 +0400, Dmitry Stogov <dmi...@zend.com> wrote:



On Wed, Feb 25, 2015 at 2:42 PM, Niktia Nefedov <inefe...@gmail.com> wrote:
On Wed, 25 Feb 2015 16:30:32 +0400, Dmitry Stogov <dmi...@zend.com> wrote:

anyone may tell, what this will print without running :)

main.php
========
<?php
declare(strict_types=1)
include "a.php";
include "b.php";
var_dump(foo("5"));
?>

a.php
=====
<?php
declare(strict_types=0)
function foo(string $a): string {
   bar($a);
   return $a;
}
?>

b.php
=====
<?php
declare(strict_types=1)
function bar(int &$a) {
   var_dump($a);
}
?>

Thank. Dmitry.


Hi Dmitry,

This will error out because $a in the scope of `foo` will be coerced to int type when passed to bar by reference.

I think it'll work without errors and produce some explainable but weird output. I didn't run it myself yet.

Yep, you're right. But it's not a problem of mixed-mode, it's more of a problem of introducing coercive type hints at all, honestly... I wonder what Zeev plans to do with __toString coercion in his RFC, because that is even more severe problem when your object unnoticedly becomes a string.

Reply via email to