On Mon, 16 Mar 2015, Yasuo Ohgaki wrote:

> 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?

The "bet" refered to having type hints at all, ever.

> 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.

Why? The foo() function's $a variable is going to be an int, or the 
function isn't called due to "strict" mode. There is no safety concern 
for the value of $a.

> Caller (a.php, b.php) must satisfy lib.php expectation to make lib.php 
> work as it should.

And it does - the result in foo() is the same.

> Otherwise, all kinds of unexpected for lib.php and it's users may 
> happen.

You're mistaken. There is *NO* difference in the body of the foo() 
function whether you have strict_types on (second example), or off 
(first example).

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

Reply via email to