On Wed, Feb 25, 2015 at 6:06 PM, Anthony Ferrara <ircmax...@gmail.com> wrote:
> Dmitry: > > On Wed, Feb 25, 2015 at 7:55 AM, 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. > > "Weird"? > > int(5) > string(1) "5" > > How is that weird? That's precisely what you asked it to do. > I just think that not allbody understand this and expect something different. Thanks. Dmitry.