Fork me on GitHub
a Sensio Labs Product

Folding Bike (v3.91.3) edition

Rule native_function_invocation

Add leading \ before function invocation to speed up resolving.

Warnings

This rule is RISKY

Risky when any of the functions are overridden.

This rule is CONFIGURABLE

You can configure this rule using the following options: exclude, include, scope, strict.

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.