Object Spy

Debugging library used to spy on objects' private values/methods

## About A debugging/testing tool which allows access to an object's or class's private and protected properties and methods without the use of Reflection. This project adheres to a [code of conduct](CODE_OF_CONDUCT.md). By participating in this project and its community, you are expected to uphold this code. ## Installation Install this package as a dependency using [Composer](https://getcomposer.org). ``` bash composer require danjones000/object-spy ``` ## Usage ``` php use Danjones000\Spy\ObjectProxy; $object = new Object(); // Can be any object. $spy = new ObjectProxy($object); // Access private property echo $spy->privateProperty; // Set private property $spy->privateProperty = 42; // Call private method $spy->privateMethod(); // Call private method with parameters $spy->protectedMethod(42, false); // Run arbitry code on object, allows passing in parameters // All arguments after the closure are passed as arguments to the closure itself $spy->call(fn ($abc) => $this->someProp = $this->someMethod($abc) * static::MULTIPLIER, 500); // PHP allows static methods to be called non-statically, so, this works as well $spy->staticPrivateMethod(); // Can also access static properties/methods without an object instance $staticSpy = new ObjectProxy(Object::class); // If there is an Object::$privateStaticProperty echo $staticSpy->privateStaticProperty; $staticSpy->privateStaticProperty = 42; $staticSpy->privateStaticMethod(); // No direct access to contstants, but we can do this $staticSpy->call(fn () => static::PRIVATE_CONSTANT); // self also works, of course ``` ## Implementation notes This class does not use reflections in its operation. Instead, if uses closures that are bound to the instance or class. ## Contributing Contributions are welcome! To contribute, please familiarize yourself with [CONTRIBUTING.md](CONTRIBUTING.md). ## Copyright and License The danjones000/object-spy library is copyright © [Dan Jones](https://danielrayjones.com/) and licensed for use under the terms of the MIT License (MIT). Please see [LICENSE](LICENSE) for more information.