Re: Missing reflection info about strict types?

From: Date: Mon, 05 Sep 2016 14:08:20 +0000
Subject: Re: Missing reflection info about strict types?
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-95648@lists.php.net to get a copy of this message
On Mon, Sep 5, 2016 at 5:49 AM, Davey Shafik <me@daveyshafik.com> wrote: > > > On Sep 5, 2016, at 02:38, Nicolas Grekas <nicolas.grekas@gmail.com> > wrote: > > > > Hello, > > > > It looks like we miss a way to check by reflection if a function/method > has > > strict types enabled or not. > > > > We'd need to do this in Symfony to generate a file with concatenated > > classes, but split "declare_strict=1" classes out so that they don't > break > > (because there is no way to create a single file that contains both > strict > > and non-strict classes unfortunately also). > > > > Would it be possible to expose some flavor of ZEND_ACC_STRICT_TYPES to > > userland? > > Strict types are only enforced from the CALL site. A library author cannot > dictate that their code be called using strict types or not, only the file > actually calling the library methods can. Though, regardless, the type > hints do ensure that the value received is of the type specified, you just > won't know if it was coerced or not. > > Just like when you import a namespaced class and alias it, the alias only > works in the file the "use " statement is in. > > Therefore, you cannot actually author strict or non-strict classes period, > unless they are only called in the file in which they are defined. > Actually you can, in PHP 5 even. This sort of thing is what the assert() statement is for. public function stringsOnly( $var ) { assert(is_str($var), 'Strings Only!'); } This does have the weakness of not working when assertions are turned off. If $var is a form of user input then an exception test is called for, and likely should be done before stringsOnly in this example gets worked with.

« previous php.internals (#95648) next »