Hi all,
On Mon, Mar 16, 2015 at 2:49 PM, Dennis Birkholz <[email protected]>
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??
Regards,
--
Yasuo Ohgaki
[email protected]