On Mon, 16 Mar 2015, Yasuo Ohgaki wrote:
> On Mon, Mar 16, 2015 at 8:18 PM, Derick Rethans <[email protected]> wrote:
>
> > On Mon, 16 Mar 2015, Xinchen Hui wrote:
> >
> > > On Mon, Mar 16, 2015 at 5:00 PM, Pierre Joye <[email protected]> wrote:
> > > >
> > > > On Mar 16, 2015 4:29 PM, "Xinchen Hui" <[email protected]> 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