Version 1
[yaffs-website] / vendor / doctrine / common / lib / Doctrine / Common / Persistence / Mapping / RuntimeReflectionService.php
1 <?php
2 /*
3  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
6  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
10  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
12  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
13  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14  *
15  * This software consists of voluntary contributions made by many individuals
16  * and is licensed under the MIT license. For more information, see
17  * <http://www.doctrine-project.org>.
18  */
19
20 namespace Doctrine\Common\Persistence\Mapping;
21
22 use Doctrine\Common\Reflection\RuntimePublicReflectionProperty;
23 use ReflectionClass;
24 use ReflectionException;
25 use ReflectionMethod;
26 use ReflectionProperty;
27
28 /**
29  * PHP Runtime Reflection Service.
30  *
31  * @author Benjamin Eberlei <kontakt@beberlei.de>
32  */
33 class RuntimeReflectionService implements ReflectionService
34 {
35     /**
36      * {@inheritDoc}
37      */
38     public function getParentClasses($class)
39     {
40         if ( ! class_exists($class)) {
41             throw MappingException::nonExistingClass($class);
42         }
43
44         return class_parents($class);
45     }
46
47     /**
48      * {@inheritDoc}
49      */
50     public function getClassShortName($class)
51     {
52         $reflectionClass = new ReflectionClass($class);
53
54         return $reflectionClass->getShortName();
55     }
56
57     /**
58      * {@inheritDoc}
59      */
60     public function getClassNamespace($class)
61     {
62         $reflectionClass = new ReflectionClass($class);
63
64         return $reflectionClass->getNamespaceName();
65     }
66
67     /**
68      * {@inheritDoc}
69      */
70     public function getClass($class)
71     {
72         return new ReflectionClass($class);
73     }
74
75     /**
76      * {@inheritDoc}
77      */
78     public function getAccessibleProperty($class, $property)
79     {
80         $reflectionProperty = new ReflectionProperty($class, $property);
81
82         if ($reflectionProperty->isPublic()) {
83             $reflectionProperty = new RuntimePublicReflectionProperty($class, $property);
84         }
85
86         $reflectionProperty->setAccessible(true);
87
88         return $reflectionProperty;
89     }
90
91     /**
92      * {@inheritDoc}
93      */
94     public function hasPublicMethod($class, $method)
95     {
96         try {
97             $reflectionMethod = new ReflectionMethod($class, $method);
98         } catch (ReflectionException $e) {
99             return false;
100         }
101
102         return $reflectionMethod->isPublic();
103     }
104 }