Fork me on GitHub
a Sensio Labs Product

Persian Successor (v3.65.0) edition

Rule native_constant_invocation

Add leading \ before constant invocation of internal constant to speed up resolving. Constant name match is case-sensitive, except for null, false and true.

Warning

Using this rule is risky

Risky when any of the constants are namespaced or overridden.

Configuration

exclude

List of constants to ignore.

Allowed types: list<string>

Default value: ['null', 'false', 'true']

fix_built_in

Whether to fix constants returned by get_defined_constants. User constants are not accounted in this list and must be specified in the include one.

Allowed types: bool

Default value: true

include

List of additional constants to fix.

Allowed types: list<string>

Default value: []

scope

Only fix constant invocations that are made within a namespace or fix all.

Allowed values: 'all' and 'namespaced'

Default value: 'all'

strict

Whether leading \ of constant invocation not meant to have it should be removed.

Allowed types: bool

Default value: true

Examples

Example #1

Default configuration.

--- Original
+++ New
-<?php var_dump(PHP_VERSION, M_PI, MY_CUSTOM_PI);
+<?php var_dump(\PHP_VERSION, \M_PI, MY_CUSTOM_PI);

Example #2

With configuration: ['scope' => 'namespaced'].

--- Original
+++ New
 <?php
 namespace space1 {
-    echo PHP_VERSION;
+    echo \PHP_VERSION;
 }
 namespace {
     echo M_PI;
 }

Example #3

With configuration: ['include' => ['MY_CUSTOM_PI']].

--- Original
+++ New
-<?php var_dump(PHP_VERSION, M_PI, MY_CUSTOM_PI);
+<?php var_dump(\PHP_VERSION, \M_PI, \MY_CUSTOM_PI);

Example #4

With configuration: ['fix_built_in' => false, 'include' => ['MY_CUSTOM_PI']].

--- Original
+++ New
-<?php var_dump(PHP_VERSION, M_PI, MY_CUSTOM_PI);
+<?php var_dump(PHP_VERSION, M_PI, \MY_CUSTOM_PI);

Example #5

With configuration: ['exclude' => ['M_PI']].

--- Original
+++ New
-<?php var_dump(PHP_VERSION, M_PI, MY_CUSTOM_PI);
+<?php var_dump(\PHP_VERSION, M_PI, MY_CUSTOM_PI);

Rule sets

The rule is part of the following rule sets:

  • @PhpCsFixer:risky with config:

    ['fix_built_in' => false, 'include' => ['DIRECTORY_SEPARATOR', 'PHP_INT_SIZE', 'PHP_SAPI', 'PHP_VERSION_ID'], 'scope' => 'namespaced', 'strict' => true]

  • @Symfony:risky with config:

    ['strict' => false]

References

The test class defines officially supported behaviour. Each test case is a part of our backward compatibility promise.