annotate vendor/psy/psysh/src/Sudo.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents a9cd425dd02b
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of Psy Shell.
Chris@0 5 *
Chris@0 6 * (c) 2012-2018 Justin Hileman
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Psy;
Chris@0 13
Chris@0 14 /**
Chris@0 15 * Helpers for bypassing visibility restrictions, mostly used in code generated
Chris@0 16 * by the `sudo` command.
Chris@0 17 */
Chris@0 18 class Sudo
Chris@0 19 {
Chris@0 20 /**
Chris@0 21 * Fetch a property of an object, bypassing visibility restrictions.
Chris@0 22 *
Chris@0 23 * @param object $object
Chris@0 24 * @param string $property property name
Chris@0 25 *
Chris@0 26 * @return mixed Value of $object->property
Chris@0 27 */
Chris@0 28 public static function fetchProperty($object, $property)
Chris@0 29 {
Chris@0 30 $refl = new \ReflectionObject($object);
Chris@0 31 $prop = $refl->getProperty($property);
Chris@0 32 $prop->setAccessible(true);
Chris@0 33
Chris@0 34 return $prop->getValue($object);
Chris@0 35 }
Chris@0 36
Chris@0 37 /**
Chris@0 38 * Assign the value of a property of an object, bypassing visibility restrictions.
Chris@0 39 *
Chris@0 40 * @param object $object
Chris@0 41 * @param string $property property name
Chris@0 42 * @param mixed $value
Chris@0 43 *
Chris@0 44 * @return mixed Value of $object->property
Chris@0 45 */
Chris@0 46 public static function assignProperty($object, $property, $value)
Chris@0 47 {
Chris@0 48 $refl = new \ReflectionObject($object);
Chris@0 49 $prop = $refl->getProperty($property);
Chris@0 50 $prop->setAccessible(true);
Chris@0 51 $prop->setValue($object, $value);
Chris@0 52
Chris@0 53 return $value;
Chris@0 54 }
Chris@0 55
Chris@0 56 /**
Chris@0 57 * Call a method on an object, bypassing visibility restrictions.
Chris@0 58 *
Chris@0 59 * @param object $object
Chris@0 60 * @param string $method method name
Chris@0 61 * @param mixed $args...
Chris@0 62 *
Chris@0 63 * @return mixed
Chris@0 64 */
Chris@0 65 public static function callMethod($object, $method, $args = null)
Chris@0 66 {
Chris@4 67 $args = \func_get_args();
Chris@4 68 $object = \array_shift($args);
Chris@4 69 $method = \array_shift($args);
Chris@0 70
Chris@0 71 $refl = new \ReflectionObject($object);
Chris@0 72 $reflMethod = $refl->getMethod($method);
Chris@0 73 $reflMethod->setAccessible(true);
Chris@0 74
Chris@0 75 return $reflMethod->invokeArgs($object, $args);
Chris@0 76 }
Chris@0 77
Chris@0 78 /**
Chris@0 79 * Fetch a property of a class, bypassing visibility restrictions.
Chris@0 80 *
Chris@0 81 * @param string|object $class class name or instance
Chris@0 82 * @param string $property property name
Chris@0 83 *
Chris@0 84 * @return mixed Value of $class::$property
Chris@0 85 */
Chris@0 86 public static function fetchStaticProperty($class, $property)
Chris@0 87 {
Chris@0 88 $refl = new \ReflectionClass($class);
Chris@0 89 $prop = $refl->getProperty($property);
Chris@0 90 $prop->setAccessible(true);
Chris@0 91
Chris@0 92 return $prop->getValue();
Chris@0 93 }
Chris@0 94
Chris@0 95 /**
Chris@0 96 * Assign the value of a static property of a class, bypassing visibility restrictions.
Chris@0 97 *
Chris@0 98 * @param string|object $class class name or instance
Chris@0 99 * @param string $property property name
Chris@0 100 * @param mixed $value
Chris@0 101 *
Chris@0 102 * @return mixed Value of $class::$property
Chris@0 103 */
Chris@0 104 public static function assignStaticProperty($class, $property, $value)
Chris@0 105 {
Chris@0 106 $refl = new \ReflectionClass($class);
Chris@0 107 $prop = $refl->getProperty($property);
Chris@0 108 $prop->setAccessible(true);
Chris@0 109 $prop->setValue($value);
Chris@0 110
Chris@0 111 return $value;
Chris@0 112 }
Chris@0 113
Chris@0 114 /**
Chris@0 115 * Call a static method on a class, bypassing visibility restrictions.
Chris@0 116 *
Chris@0 117 * @param string|object $class class name or instance
Chris@0 118 * @param string $method method name
Chris@0 119 * @param mixed $args...
Chris@0 120 *
Chris@0 121 * @return mixed
Chris@0 122 */
Chris@0 123 public static function callStatic($class, $method, $args = null)
Chris@0 124 {
Chris@4 125 $args = \func_get_args();
Chris@4 126 $class = \array_shift($args);
Chris@4 127 $method = \array_shift($args);
Chris@0 128
Chris@0 129 $refl = new \ReflectionClass($class);
Chris@0 130 $reflMethod = $refl->getMethod($method);
Chris@0 131 $reflMethod->setAccessible(true);
Chris@0 132
Chris@0 133 return $reflMethod->invokeArgs(null, $args);
Chris@0 134 }
Chris@0 135
Chris@0 136 /**
Chris@0 137 * Fetch a class constant, bypassing visibility restrictions.
Chris@0 138 *
Chris@0 139 * @param string|object $class class name or instance
Chris@0 140 * @param string $const constant name
Chris@0 141 *
Chris@0 142 * @return mixed
Chris@0 143 */
Chris@0 144 public static function fetchClassConst($class, $const)
Chris@0 145 {
Chris@0 146 $refl = new \ReflectionClass($class);
Chris@0 147
Chris@0 148 return $refl->getConstant($const);
Chris@0 149 }
Chris@0 150 }