Mercurial > hg > isophonics-drupal-site
comparison vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php @ 14:1fec387a4317
Update Drupal core to 8.5.2 via Composer
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:46:53 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
13:5fb285c0d0e3 | 14:1fec387a4317 |
---|---|
1 <?php | |
2 | |
3 namespace DeepCopy\Reflection; | |
4 | |
5 use DeepCopy\Exception\PropertyException; | |
6 use ReflectionClass; | |
7 use ReflectionException; | |
8 use ReflectionObject; | |
9 use ReflectionProperty; | |
10 | |
11 class ReflectionHelper | |
12 { | |
13 /** | |
14 * Retrieves all properties (including private ones), from object and all its ancestors. | |
15 * | |
16 * Standard \ReflectionClass->getProperties() does not return private properties from ancestor classes. | |
17 * | |
18 * @author muratyaman@gmail.com | |
19 * @see http://php.net/manual/en/reflectionclass.getproperties.php | |
20 * | |
21 * @param ReflectionClass $ref | |
22 * | |
23 * @return ReflectionProperty[] | |
24 */ | |
25 public static function getProperties(ReflectionClass $ref) | |
26 { | |
27 $props = $ref->getProperties(); | |
28 $propsArr = array(); | |
29 | |
30 foreach ($props as $prop) { | |
31 $propertyName = $prop->getName(); | |
32 $propsArr[$propertyName] = $prop; | |
33 } | |
34 | |
35 if ($parentClass = $ref->getParentClass()) { | |
36 $parentPropsArr = self::getProperties($parentClass); | |
37 foreach ($propsArr as $key => $property) { | |
38 $parentPropsArr[$key] = $property; | |
39 } | |
40 | |
41 return $parentPropsArr; | |
42 } | |
43 | |
44 return $propsArr; | |
45 } | |
46 | |
47 /** | |
48 * Retrieves property by name from object and all its ancestors. | |
49 * | |
50 * @param object|string $object | |
51 * @param string $name | |
52 * | |
53 * @throws PropertyException | |
54 * @throws ReflectionException | |
55 * | |
56 * @return ReflectionProperty | |
57 */ | |
58 public static function getProperty($object, $name) | |
59 { | |
60 $reflection = is_object($object) ? new ReflectionObject($object) : new ReflectionClass($object); | |
61 | |
62 if ($reflection->hasProperty($name)) { | |
63 return $reflection->getProperty($name); | |
64 } | |
65 | |
66 if ($parentClass = $reflection->getParentClass()) { | |
67 return self::getProperty($parentClass->getName(), $name); | |
68 } | |
69 | |
70 throw new PropertyException( | |
71 sprintf( | |
72 'The class "%s" doesn\'t have a property with the given name: "%s".', | |
73 is_object($object) ? get_class($object) : $object, | |
74 $name | |
75 ) | |
76 ); | |
77 } | |
78 } |