Re: About declare(strict_types = 1)
| From: | Nikita Nefedov | Date: | Mon, 16 Mar 2015 11:44:49 +0000 |
| Subject: | Re: About declare(strict_types = 1) | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-85031@lists.php.net to get a copy of this message | ||
On Mon, 16 Mar 2015 14:33:00 +0300, Yasuo Ohgaki <yohgaki@ohgaki.net> wrote:
Hi Derick, On Mon, Mar 16, 2015 at 8:18 PM, Derick Rethans <derick@php.net> wrote:When called from a.php, foo() will get and int(123), this is exactly what is expected. Author of a.php acknowledges that all arguments in fcalls from this file will be converted to appropriate types, this is basically how all our internal functions work currently and it's perfectly acceptable. But if you don't want this kind of type juggling then you opt-in strict types. This is basically as easy as it gets, I don't see any way to make it simpler. There's nothing to evolve in this RFC, it covers pretty much everything and the idea of allowing for caller to make a decision is, in my opinion, a great win in this situation.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? lib.php: <?phpdeclare(strict_types = 1); function foo(int $a) { // no function call here }?> The declare here does just nothing. a.php: <?phprequire "lib.php"; foo("123"); // will work?> b.php: <?phpdeclare(strict_types = 1); require "lib.php"; foo("123"); // will give an error?> This behavior is unacceptable. Caller (a.php, b.php) must satisfy lib.php expectation to make lib.php work as it should. Otherwise, all kinds of unexpected for lib.php and it's users may happen.