On Mon, Mar 16, 2015 at 11:33 AM, Yasuo Ohgaki <yohg...@ohgaki.net> wrote:

> Hi Derick,
>
> On Mon, Mar 16, 2015 at 8:18 PM, Derick Rethans <der...@php.net> wrote:
>
> > On Mon, 16 Mar 2015, Xinchen Hui wrote:
> >
> > > On Mon, Mar 16, 2015 at 5:00 PM, Pierre Joye <pierre....@gmail.com>
> > wrote:
> > > >
> > > > On Mar 16, 2015 4:29 PM, "Xinchen Hui" <larue...@php.net> wrote:
> > > >>
> > > >>      that means, I need to add a lots of (int) while I try to call a
> > > >> function in a library which is not written by myself.
> > > >>
> > > >>      is that right?
> > > >
> > > > You got the answer but one thing bothers me a lot right now.
> > > >
> > > > How did you vote against this rfc while missing the core point of it
> > (after
> > > > actually having a strict mode)?
> >
> > > as I said,
> > > "
> > >  acutaly, I believe in most applications, they will still keep this
> off..
> > >
> > >   so why we introduce such thing?
> > > "
> > > I don't like strict_types at all..
> >
> > To be frank, I don't think "I don't like this" is a terribly good reason
> > to vote against (or for something). What is important is how many people
> > would actually benefit from a feature, without it causing issues for
> > others. I am certainly no fan of the "declare" *syntax*, but I do know,
> > from talking at conferences that many many developers would like to see
> > scalar type hints in some way — both weak (mode 1 of the STHv5 RFC), and
> > strict (mode 2). It even caters for people that don't want to use them
> > at all, as they can simply not use them. I also know, that without a
> > dual mode, it seems very unlikely for scalar type hints to make it
> > into PHP 7, and I don't think that is what users want. As this is our
> > *best* bet, I can only vote "yes".
>
>
> Are you sure on your bet?
>
> lib.php:
> <?php
>         declare(strict_types = 1);
>         function foo(int $a) {
>         // no function call here
>         }
> ?>
> The declare here does just nothing.
>
> a.php:
> <?php
>         require "lib.php";
>         foo("123"); // will work
> ?>
>
> b.php:
> <?php
>         declare(strict_types = 1);
>         require "lib.php";
>         foo("123"); // will give an error
> ?>
>
> This behavior is unacceptable.
> Caller (a.php, b.php) must satisfy lib.php expectation to make lib.php
> work as it should. Otherwise, all kinds of unexpected for lib.php and it's
> users may happen.
>
> Regards,
>
> --
> Yasuo Ohgaki
> yohg...@ohgaki.net
>



Hi Yasuo,

   The expectation here has been made by the caller (i.e. they’ve put
declare strict=1 in their file). It’s not an expectation of the library.
The library get’s the types it wants (whether they're coerced or not)
regardless of what the caller does, and the caller get’s the benefit of
being able to assure all their parameter types are correct.

/@leedavis81

Reply via email to