ReflectionPropertyAccessStrategy   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 27
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 5
c 2
b 0
f 0
lcom 0
cbo 3
dl 0
loc 27
ccs 12
cts 12
cp 1
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B propertyFor() 0 20 5
1
<?php
2
3
/*
4
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
5
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
6
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
8
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
9
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
10
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
11
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
12
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
13
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
14
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
15
 *
16
 * The software is based on the Axon Framework project which is
17
 * licensed under the Apache 2.0 license. For more information on the Axon Framework
18
 * see <http://www.axonframework.org/>.
19
 *
20
 * This software consists of voluntary contributions made by many individuals
21
 * and is licensed under the MIT license. For more information, see
22
 * <http://www.governor-framework.org/>.
23
 */
24
25
namespace Governor\Framework\Common\Property;
26
27
/**
28
 * PropertyAccessStrategy implementation using reflection to find the suitable property.
29
 * This implementation will first try to find the property directly by looking for a class property by its name.
30
 * Then it will try if any methods with the signature [get,is,has]propertyName exist and use the first it will found.
31
 * If there is no match a null will be returned.
32
 *
33
 * @author    "David Kalosi" <[email protected]>
34
 * @license   <a href="http://www.opensource.org/licenses/mit-license.php">MIT License</a>
35
 */
36
class ReflectionPropertyAccessStrategy extends PropertyAccessStrategy
37
{
38
    /**
39
     * {@inheritdoc}
40
     */
41 21
    protected function propertyFor($targetClass, $property)
42
    {
43 21
        $reflectionClass = new \ReflectionClass($targetClass);
44
45 21
        if ($reflectionClass->hasProperty($property)) {
46 10
            return new ReflectionPropertyImpl($reflectionClass->getProperty($property));
47
        }
48
49 14
        foreach (array('get', 'is', 'has') as $prefix) {
50 14
            $methodName = sprintf('%s%s', $prefix, ucfirst($property));
51
52 14
            foreach ($reflectionClass->getMethods() as $method) {
53 14
                if (0 === strcmp($method->getName(), $methodName)) {
0 ignored issues
show
Bug introduced by
Consider using $method->name. There is an issue with getName() and APC-enabled PHP versions.
Loading history...
54 13
                    return new ReflectionMethodImpl($method);
55
                }
56 14
            }
57 1
        }
58
59 1
        return null;
60
    }
61
62
}