RegexpDetector::extractClass()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by solly [19.10.17 1:12]
4
 */
5
6
namespace insolita\codestat\lib\classdetect;
7
8
use insolita\codestat\lib\contracts\ClassDetectorInterface;
9
10
class RegexpDetector implements ClassDetectorInterface
11
{
12
    /**
13
     * @param string $filePath
14
     *
15
     * @return null|string
16
     */
17
    public function resolveClassName($filePath)
18
    {
19
        $content = file_get_contents($filePath);
20
        $className = $this->extractClass($content);
21
        if ($className !== null) {
22
            $namespace = $this->extractNamespace($content);
23
            return $namespace . '\\' . $className;
24
        } else {
25
            return null;
26
        }
27
    }
28
    
29
    /**
30
     * @param string $content
31
     *
32
     * @return string
33
     */
34
    protected function extractNamespace($content)
35
    {
36
        preg_match('/^\s*namespace\s*([\\\\\w]+);\s*$/mis', $content, $matches);
37
        return $matches[1] ?? '';
38
    }
39
    
40
    /**
41
     * @param $content
42
     *
43
     * @return string|null
44
     */
45
    protected function extractClass($content)
46
    {
47
        preg_match('/\s*(?:class|trait|interface)\s+([\w]+)\s*[\{]*/mis', $content, $matches);
48
        return $matches[1] ?? null;
49
    }
50
}
51