Completed
Push — master ( 56f22b...5c0ad8 )
by Davide
01:07
created

Php::isolate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 0
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
3
namespace Noodlehaus\Parser;
4
5
use Exception;
6
use Noodlehaus\Exception\ParseException;
7
use Noodlehaus\Exception\UnsupportedFormatException;
8
9
/**
10
 * PHP parser
11
 *
12
 * @package    Config
13
 * @author     Jesus A. Domingo <[email protected]>
14
 * @author     Hassan Khan <[email protected]>
15
 * @author     Filip Š <[email protected]>
16
 * @link       https://github.com/noodlehaus/config
17
 * @license    MIT
18
 */
19
class Php implements ParserInterface
20
{
21
    /**
22
     * {@inheritDoc}
23
     * Loads a PHP file and gets its' contents as an array
24
     *
25
     * @throws ParseException             If the PHP file throws an exception
26
     * @throws UnsupportedFormatException If the PHP file does not return an array
27
     */
28 12
    public function parseFile($filename)
29
    {
30
        // Run the fileEval the string, if it throws an exception, rethrow it
31 12
        try {
32 12
            $data = require $filename;
33 12
        } catch (Exception $exception) {
34
            throw new ParseException(
35
                [
36
                    'message'   => 'PHP file threw an exception',
37 12
                    'exception' => $exception,
38 6
                ]
39 3
            );
40
        }
41 3
42 3
        // Complete parsing
43
        return $this->parse($data, $filename);
0 ignored issues
show
Documentation introduced by
$filename is of type string, but the function expects a object<Noodlehaus\Parser\strring>|null.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
44 1
    }
45
46
    /**
47
     * {@inheritDoc}
48 9
     * Loads a PHP string and gets its' contents as an array
49 3
     *
50 1
     * @throws ParseException             If the PHP string throws an exception
51
     * @throws UnsupportedFormatException If the PHP string does not return an array
52
     */
53 9
    public function parseString($config)
54 3
    {
55
        // Handle PHP start tag
56
        $config = trim($config);
57 6
        if (substr($config, 0, 2) === '<?') {
58
            $config = '?>' . $config;
59
        }
60
61
        // Eval the string, if it throws an exception, rethrow it
62
        try {
63 3
            $data = $this->isolate($config);
64
        } catch (Exception $exception) {
65 3
            throw new ParseException(
66
                [
67
                    'message'   => 'PHP string threw an exception',
68
                    'exception' => $exception,
69
                ]
70
            );
71
        }
72
73
        // Complete parsing
74
        return $this->parse($data);
75
    }
76
77
    /**
78
     * Completes parsing of PHP data
79
     *
80
     * @param  array   $data
81
     * @param  strring $filename
82
     *
83
     * @throws ParseException If there is an error parsing the PHP data
84
     */
85
    protected function parse($data = null, $filename = null)
0 ignored issues
show
Unused Code introduced by
The parameter $filename is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
86
    {
87
        // If we have a callable, run it and expect an array back
88
        if (is_callable($data)) {
89
            $data = call_user_func($data);
90
        }
91
92
        // Check for array, if its anything else, throw an exception
93
        if (!is_array($data)) {
94
            throw new UnsupportedFormatException('PHP data does not return an array');
95
        }
96
97
        return $data;
98
    }
99
100
    /**
101
     * Runs PHP string in isolated method
102
     *
103
     * @param  string $EGsfKPdue7ahnMTy
104
     *
105
     * @return array
106
     */
107
    protected function isolate($EGsfKPdue7ahnMTy)
108
    {
109
        return eval($EGsfKPdue7ahnMTy);
110
    }
111
112
    /**
113
     * {@inheritDoc}
114
     */
115
    public static function getSupportedExtensions()
116
    {
117
        return ['php'];
118
    }
119
}
120