Re: About declare(strict_types = 1)
| From: | Mike Willbanks | Date: | Mon, 16 Mar 2015 20:03:51 +0000 |
| Subject: | Re: About declare(strict_types = 1) | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-85084@lists.php.net to get a copy of this message | ||
On Mon, Mar 16, 2015 at 2:12 PM, Yasuo Ohgaki <yohgaki@ohgaki.net> wrote:
> Hi all,
>
> On Mon, Mar 16, 2015 at 2:49 PM, Dennis Birkholz <dennis@birkholz.biz>
> wrote:
>
> > Am 16.03.2015 um 06:28 schrieb Xinchen Hui:
> > > lib.php
> > > <?php
> > > declare(strict_types = 1);
> > > function add(int $a, int $b) {
> > > }
> > >
> > > <?php
> > > add($_GET['a'], $_GET['b']);
> > >
> > > 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.
> >
> > that is not right and has been discussed a thousand times over.
> > The declare changes the rules only for function calls in the file it is
> > declared in.
> >
> > so:
> > lib.php:
> > <?php
> > declare(strict_types = 1);
> > function foo(int $a) {
> > // no function call here
> > }
> > ?>
> > The declare here does just nothing.
> >
> > <?php
> > require "lib.php";
> > foo("123"); // will work
> > ?>
> >
> > <?php
> > declare(strict_types = 1);
> > require "lib.php";
> > foo("123"); // will give an error
> > ?>
> >
>
> If this kind of behavior is allowed, why "strict mode" is strict? It's not
> strict at all if mode could be overridden.
>
> "strict_mode" is just controlling errors, then it should be handled as
> error E_WARNING/E_TYPE or whatever.
>
> Even if what it controlling is error that can be overridden by caller, yet
> calling it "strict" is not correct. Proper name would be something
> like "raise_type_error".
>
> Let see how it looks if "strict_types" is renamed to "raise_type_error"
>
> <?php
> declare(raise_type_error = 1);
> function foo(int $a) {
> // no function call here
> }
> ?>
> The declare here does just nothing.
>
> <?php
> require "lib.php";
> foo("123"); // will work
> ?>
>
> <?php
> declare(raise_type_error = 1);
> require "lib.php";
> foo("123"); // will give an error
> ?>
>
> Is everyone feel OK with this??
>
That seems far more odd in my opinion. I vastly prefer the first.