> 1 авг. 2021 г., в 17:08, Rowan Tommins <rowan.coll...@gmail.com> написал(а):
> 
> On 01/08/2021 12:21, Serhii Smirnov wrote:
>> instead of defining constants like:
>> const FOO = 'FOO';
>> 
>> they could be defined like:
>> autoconst FOO; // defines a constant FOO with the value 'FOO'
> 
> 
> While I've certainly seen constants like this in the past, I think they 
> mostly fall into two categories:
> 
> A) Constants where the value doesn't actually matter, and you just need 
> something to compare input against. As of PHP 8.1, we will have enums, where 
> you can just write "case FOO;" and not assign any value at all, which can 
> probably be used in most of these situations.
> 
> B) Constants where the value matters, but the constant name isn't actually 
> conveying anything. Given your suggestion of built-in transforms for 
> lower-case etc, these seem like what you're interested in.
> 
> These often arise from a misunderstanding of the dogma to "avoid magic 
> numbers and hard-coded values", and result in code that looks like it's 
> SHOUTING without conveying any extra information. For instance, people start 
> with this:


I was more interested in autoconst keyword that reduces copy/pasting constant 
name as it's value. camelcase and snakecase is an addition. A real example why 
I wanted to use autoconst: on the past project, we had class that holds 
constants with the feature flag names. Something like:

class Features
{
    const FEATURE_FLAG_WITH_SOME_LONG_NAME = 'feature_flag_with_some_long_name';
    const FEATURE_SOME_ANOTHER_COOL_FEATURE = 
'feature_some_another_cool_feature';
}

later, in the code we had to check if certain feature is enabled in the system:

if ($featureManager->isEnabled(Features::FEATURE_FLAG_WITH_SOME_LONG_NAME)) {
   // some feature related code goes here
}

The class Features could be written as:

class Features
{
    autoconst lower FEATURE_FLAG_WITH_SOME_LONG_NAME, 
FEATURE_SOME_ANOTHER_COOL_FEATURE;
}

Reply via email to