Re: proposed access modifier "silent" ... was: Re: [PHP-DEV] Implicit isset/isempty check on short-ternary operator
| From: | Michael Morris | Date: | Mon, 11 Apr 2011 17:17:35 +0000 |
| Subject: | Re: proposed access modifier "silent" ... was: Re: [PHP-DEV] Implicit isset/isempty check on short-ternary operator | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-51864@lists.php.net to get a copy of this message | ||
I might come off rather crumudgeonly here, but these last few threads I've
seen going across to
silence notices have a common theme - "I wanna be a lazier coder."
Which is fine - set the PHP error level to not show them.
But don't ask the engine to be rewritten to encourage bad coding practices
which failing to properly initialize variables is a prime example of. It's
this sort of thinking that got register_globals and magic_quotes put into
the language no doubt. In the long run it's an extremely bad idea and needs
to be avoided.
-1
On Mon, Apr 11, 2011 at 9:36 AM, Etienne Kneuss <etienne@immomigsa.ch>wrote:
> On Apr 10 21:22:58, D. Dante Lorenso wrote:
> > The problem with implementing "ifsetor", "filled", or "??"
> > in userland
> > is that the "not set" or "undefined" warning is fired before the
> > variable is passed to the underlying function/method.
> >
> > Is it possible to add a modifier that turns off warnings for undefined
> > variables whenever that specific method is called? Something like:
>
> Short answer is no. See below.
>
> >
> > class Utility {
> > public silent function filled() {
> > $args = func_get_args();
> > foreach ($args as $arg) {
> > if (!empty($arg)) { return $arg; }
> > }
> > return false;
> > }
> > }
> >
> > $x = Utility::filled($my_undef, $x['undef'], $nosuch, 'default');
> >
> > The modifier "silent" will turn all undefined or "not isset()"
> > variables
> > into NULL values when being passed to the method and no warnings will be
> > issued.
>
> This is not really possible without some major changes. You've to
> understand that arguments are evaluated before the function/method call.
> The notices are thus emited before even considering the function/method
> call.
>
> This is exactly why isset and empty are not functions, but language
> constructs, so that they can work with variables in a special way.
>
> >
> > Then, we can build our own damn functions as we see fit without the fuss.
> >
> > -- Dante
> >
> > --
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>