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 }