Fork me on GitHub
a Sensio Labs Product

Persian Successor (v3.65.0) edition

Rule native_function_invocation

Add leading \ before function invocation to speed up resolving.

Warning

Using this rule is risky

Risky when any of the functions are overridden.

Configuration

exclude

List of functions to ignore.

Allowed types: list<string>

Default value: []

include

List of function names or sets to fix. Defined sets are @internal (all native functions), @all (all global functions) and @compiler_optimized (functions that are specially optimized by Zend).

Allowed types: list<string>

Default value: ['@compiler_optimized']

scope

Only fix function calls that are made within a namespace or fix all.

Allowed values: 'all' and 'namespaced'

Default value: 'all'

strict

Whether leading \ of function call not meant to have it should be removed.

Allowed types: bool

Default value: true

Examples

Example #1

Default configuration.

--- Original
+++ New
 <?php

 function baz($options)
 {
-    if (!array_key_exists("foo", $options)) {
+    if (!\array_key_exists("foo", $options)) {
         throw new \InvalidArgumentException();
     }

     return json_encode($options);
 }

Example #2

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

--- Original
+++ New
 <?php

 function baz($options)
 {
-    if (!array_key_exists("foo", $options)) {
+    if (!\array_key_exists("foo", $options)) {
         throw new \InvalidArgumentException();
     }

     return json_encode($options);
 }

Example #3

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

--- Original
+++ New
 <?php
 namespace space1 {
-    echo count([1]);
+    echo \count([1]);
 }
 namespace {
-    echo count([1]);
+    echo \count([1]);
 }

Example #4

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

--- Original
+++ New
 <?php
 namespace space1 {
-    echo count([1]);
+    echo \count([1]);
 }
 namespace {
     echo count([1]);
 }

Example #5

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

--- Original
+++ New
 <?php
-myGlobalFunction();
+\myGlobalFunction();
 count();

Example #6

With configuration: ['include' => ['@all']].

--- Original
+++ New
 <?php
-myGlobalFunction();
-count();
+\myGlobalFunction();
+\count();

Example #7

With configuration: ['include' => ['@internal']].

--- Original
+++ New
 <?php
 myGlobalFunction();
-count();
+\count();

Example #8

With configuration: ['include' => ['@compiler_optimized']].

--- Original
+++ New
 <?php
 $a .= str_repeat($a, 4);
-$c = get_class($d);
+$c = \get_class($d);

Rule sets

The rule is part of the following rule sets:

  • @PhpCsFixer:risky with config:

    ['include' => ['@compiler_optimized'], 'scope' => 'namespaced', 'strict' => true]

  • @Symfony:risky with config:

    ['include' => ['@compiler_optimized'], 'scope' => 'namespaced', 'strict' => true]

References

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