Re: [RFC][VOTE] Constructor behaviour of internal classes
| From: | Marc Bennewitz | Date: | Sat, 04 Apr 2015 18:16:48 +0000 |
| Subject: | Re: [RFC][VOTE] Constructor behaviour of internal classes | ||
| References: | 1 2 3 4 5 6 7 8 9 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-85732@lists.php.net to get a copy of this message | ||
Hi Nikita, Dmitry,
I think it's a mistake to throw a TypeException on invalid argument count as in this case it has nothing to do with a type.
Marc
Am 03.04.2015 um 20:48 schrieb Dmitry Stogov:
I don' t see any problems. Thanks. Dmitry. On Fri, Apr 3, 2015 at 6:31 PM, Nikita Popov <nikita.ppv@gmail.com> wrote:On Wed, Apr 1, 2015 at 3:31 AM, Dan Ackroyd <danack@basereality.com> wrote:Hi Dmitry, Your approach is definitely a better one, and I have no objection to it whatsoever. Sorry, I was too busy to look deeply at each class but I can't see any problems. Nikita Popov wrote:PR for throwing TypeException (independently of strict mode) for zpp failures in constructors is here: https://github.com/php/php-src/pull/1215 Will apply it if nobody sees a problem with it. Nikitadoes that mean that the same code using strict_types=1 mode will start throwing TypeException instead of whatever exception type is passed to replace_error_handling?That's going to affect everything isn't it - not just this RFC? However I think that is the correct behaviour. It more closely resembles the behaviour that will be seen in userland code, and is more 'semantically' meaningful i.e. it allows people to tell the cases between the two types of errors apart. It probably bears more thinking about though. cheers Dan $formatInfoList = [["en_US", "{0,number,integer} monkeys on {1,number,integer} treesmake {2,number} monkeys per tree"],["en_US", '{this was made intentionally incorrect}'], //valid typebut wrong value["en_US", new StdClass] //wrong type] foreach ($formatInfoList as $formatInfo) {list($locale, $pattern) = formatInfo; try { $mf = new MessageFormatter($locale, $pattern); echo $mf->format(array(4560, 123, 4560/123)); } catch(IntlException $ie) { // A strict type-est person would not want this to catch thecase where// the wrong type has been passed, as it's not an exceptionrelated to Intl// it's an exception related to the type being wrong. }}