FunctionRepository::startsWith()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 4
rs 10
cc 2
eloc 2
nc 2
nop 2
1
<?php
2
/**
3
 * Author: Nil Portugués Calderó <[email protected]>
4
 * Date: 10/31/15
5
 * Time: 11:24 PM
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
namespace NilPortugues\BackslashFixer\Fixer;
11
12
/**
13
 * Class FunctionRepository
14
 * @package NilPortugues\BackslashFixer\Fixer
15
 */
16
class FunctionRepository
17
{
18
    /**
19
     * @var array
20
     */
21
    private static $backslashable = [];
22
    /**
23
     * @var array
24
     */
25
    private static $functions = [];
26
    /**
27
     *
28
     */
29
    public function __construct()
30
    {
31
        self::$functions = \array_map('strtolower', \get_defined_functions()['internal']);
32
        self::$functions = \array_combine(\array_values(self::$functions), self::$functions);
33
        ksort(self::$functions, \SORT_REGULAR);
34
    }
35
36
    /**
37
     * Search backwards starting from haystack length characters from the end
38
     *
39
     * @param $haystack
40
     * @param $needle
41
     * @return bool
42
     */
43
    private static function startsWith($haystack, $needle)
44
    {
45
        return $needle === "" || strrpos($haystack, $needle, -\strlen($haystack)) !== \false;
46
    }
47
48
    /**
49
     * @return array
50
     */
51
    public static function getBackslashableFunctions()
52
    {
53
        if (!empty(self::$backslashable)) {
54
            return self::$backslashable;
55
        }
56
        self::$backslashable = [];
57
58
        foreach (self::$functions as $name => $value) {
59
            if (\true === self::startsWith('is_', $value)) {
60
                $backslashable[$name] = $value;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$backslashable was never initialized. Although not strictly required by PHP, it is generally a good practice to add $backslashable = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
61
            }
62
        }
63
64
        self::$backslashable['strlen'] = 'strlen';
65
        self::$backslashable['defined'] = 'defined';
66
        self::$backslashable['call_user_func'] = 'call_user_func';
67
        self::$backslashable['call_user_func_array'] = 'call_user_func_array';
68
69
        return self::$backslashable;
70
    }
71
}
72