> 1 авг. 2021 г., в 17:08, Rowan Tommins <[email protected]> написал(а):
>
> 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;
}