danjones000/object-spy

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

v0.1.0 2021-10-15 11:28 UTC

This package is auto-updated.

Last update: 2024-04-15 22:22:32 UTC


README

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. By participating in this project and its community, you are expected to uphold this code.

Installation

Install this package as a dependency using Composer.

composer require danjones000/object-spy

Usage

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.

Copyright and License

The danjones000/object-spy library is copyright © Dan Jones and licensed for use under the terms of the MIT License (MIT). Please see LICENSE for more information.