Re: About declare(strict_types = 1)

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

« previous php.internals (#85084) next »