Re: [PHP-DEV] [Strawpoll] Promoting redefining constant to exception

2022-01-25 Thread Rowan Tommins

On 25/01/2022 19:44, Chase Peeler wrote:

If we start throwing exceptions, which can't be suppressed, it will make
this much more difficult to read since the constants.php will have to be
updated:

if(!defined('dbserver')){
   define('dbserver','productiondb.example.com');
}
if(!defined('otherconstant')){
define('otherconstants','foobar');
}



A wrapper function for this use case is entirely trivial:

function define_if_not_defined($name, $value) {
   if ( ! defined($name) ) {
   define($name, $value);
   }
}

Give it a short name like 'def', and your config file actually becomes 
shorter:


def('dbserver', 'productiondb.example.com');
def('otherconstants', 'foobar');

"define" itself is just a function name, not a reserved word, so you 
could even declare the above as "define" in a namespace, then add "use 
function SomeNamespace\define;" and leave the rest of the file alone.


Regards,

--
Rowan Tommins
[IMSoP]

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php



Re: [PHP-DEV] [Strawpoll] Promoting redefining constant to exception

2022-01-25 Thread Bruce Weirdan
On Tue, Jan 25, 2022 at 9:45 PM Chase Peeler  wrote:

> it will make this much more difficult to read since the constants.php will 
> have to be
> updated:
>
> if(!defined('dbserver')){
>   define('dbserver','productiondb.example.com');
> }
> if(!defined('otherconstant')){
>define('otherconstants','foobar');
> }


You could use this form for conciseness:
```
defined('dbserver')  or  define('dbserver', 'productiondb.example.com');
defined('otherconstant') or  define('otherconstant', 'foobar');
```

IMHO it's clearer than `@define()` as it makes it explicit where you
expect a possible previous definition and where you don't.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php



Re: [PHP-DEV] [Strawpoll] Promoting redefining constant to exception

2022-01-25 Thread Chase Peeler
On Tue, Jan 25, 2022 at 3:08 PM Kamil Tekiela  wrote:

> A constant is a value that, unlike a variable, cannot be reassociated with
> a different value. A properly written software should never redefine
> constants. The possibility of redefining constants in PHP should be
> considered a bug rather than a feature.
> Constants are not good for configuration values that can be changed. A
> proper data structure should be used instead. Constants should never have
> to be redefined, either by the software itself, its tests or its
> extensions. Constant values must remain the same under all circumstances
> otherwise they are no longer constants.
>
>
Regardless of whether it's a proper use of constants or not, it's something
that was in place long before I started and not something we can easily
change now. Also, I'm not suggesting that we allow constants to be
redefined. My setup actually works because you can't redefine them. The
idea is that the local configuration file is processed first.


> +1 to remove it in PHP 9.0
>


-- 
Chase Peeler
chasepee...@gmail.com


Re: [PHP-DEV] [Strawpoll] Promoting redefining constant to exception

2022-01-25 Thread Kamil Tekiela
A constant is a value that, unlike a variable, cannot be reassociated with
a different value. A properly written software should never redefine
constants. The possibility of redefining constants in PHP should be
considered a bug rather than a feature.
Constants are not good for configuration values that can be changed. A
proper data structure should be used instead. Constants should never have
to be redefined, either by the software itself, its tests or its
extensions. Constant values must remain the same under all circumstances
otherwise they are no longer constants.

+1 to remove it in PHP 9.0


Re: [PHP-DEV] [Strawpoll] Promoting redefining constant to exception

2022-01-25 Thread Chase Peeler
We have a main "constants.php" file that resides in git. The first line of
constants.php includes local_constants.php, which is kept out of git. The
idea is that we can "override" any of the constants on a per server basis.

constants.php:
@define('dbserver','productiondb.example.com');

local_constants.php
@define('dbserver','devdb.example.com');

If we start throwing exceptions, which can't be suppressed, it will make
this much more difficult to read since the constants.php will have to be
updated:

if(!defined('dbserver')){
  define('dbserver','productiondb.example.com');
}
if(!defined('otherconstant')){
   define('otherconstants','foobar');
}




On Sat, Jan 22, 2022 at 10:29 PM Mark Randall  wrote:

> Internals,
>
> While cleaning up some PRs I was prompted to re-visit one I had
> outstanding about exception-throwing behaviour when redefining
> constants, this applies to functions like define and language syntax
> constructs such as const.
>
> There have been a few discussions in the past about the topic.
>
> Here is one from 2016 from Dmitry:
> https://wiki.php.net/rfc/constant_redefinition
>
> Discussion:
> https://externals.io/message/93885
>
> My own PR:
> https://github.com/php/php-src/pull/5265
>
> Since Dmitry's RFC was made in 2016, and my PR a while ago, attempted
> redeclaration was promoted from a notice to a warning, but I still think
> it's sensible to go one step further.
>
> There was mention on github that there was some resistence to promotion
> to exception in the past, but I think there is a strong possibility that
> the mood may be different many years later, with PHPs positive moves
> towards throwing on poorly defined or illogical behaviour.
>
> To gauge this, I'm throwing out a non-binding strawpoll to get the lay
> of the land before doing anything else with it. If there is general
> favour I'll fix up my patch and do a proper RFC.
>
> https://wiki.php.net/redefine_constants_exception_strawpoll
>
> Mark Randall
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>
>

-- 
Chase Peeler
chasepee...@gmail.com


Re: [PHP-DEV] Long-Term Planning for PHP 9.0 Error Promotion

2022-01-25 Thread Max Semenik
On Tue, Jan 25, 2022 at 2:47 AM Mark Randall  wrote:

> Let's open a discussion as to what we might want to do in the future,
> and depending on how things shake out, we can decide what route to take
> with regards to bringing RFCs to vote.


My personal opinion: there should be no old style errors, warnings or
notices. I don't want to have any more situations like "Oh, there was
something wrong with your code. Hope you'll notice this in your error logs.
Meanwhile, the app will just kinda limp along, likely resulting in bogus
data/behavior." There should only be E_DEPRECATED for things that will
change in a future release and E_ERROR for rare situations that can't be
reasonably handled with exceptions (like  uh, unhandled exceptions and OOM
errors). Everything else should be an exception, period.

-- 
Best regards,
Max Semenik