Exposure
"Make your privates public"., (*1)
Have you ever needed access to private/protected object properties or methods? Of course they're private/protected for a reason... but, sometimes you just need them., (*2)
Exposure exposes private and protected properties and methods as well as allowing for new methods to be added to an object after instantiation., (*3)
Installation
Via Composer, (*4)
composer require stevenwadejr/exposure
What's new in 0.3.0?
You can now expose your objects and benefit from type hinting. Exposure now comes with a factory to create a new instance of Exposure that extends your closed class., (*5)
Example:, (*6)
use StevenWadeJr\Exposure\Factory;
class CantTouchThis
{
private $privateParty = 'This is private';
}
$exposed = Factory::expose(new CantTouchThis);
echo $exposed->privateParty; // outputs 'This is private'
var_dump($exposed instanceof CantTouchThis); // outputs 'true'
Example
<?php
use StevenWadeJr\Exposure\Exposure;
class CantTouchThis
{
public $publicProperty = 'This is public';
protected $protectedProperty = 'This is protected';
private $privateProperty = 'This is private';
public function publicMethod()
{
return 'This is a public method';
}
protected function protectedMethod()
{
return 'This is a protected method';
}
private function privateMethod()
{
return 'This is a private method';
}
}
$exposure = new Exposure(new CantTouchThis);
Access public properties and methods
echo $exposure->publicProperty; // outputs 'This is public'
echo $exposure->publicMethod(); // outputs 'This is a public method'
Inaccessible properties and methods
echo $exposure->privateProperty; // outputs 'This is private'
echo $exposure->protectedMethod(); // outputs 'This is a protected method'
Overwrite protected properties
$exposure->protectedProperty = 'New protected property';
echo $exposure->protectedProperty; // outputs 'New protected property'
Add a new method to the object
$exposure->__methods('setProtectedProperty', function()
{
$this->protectedProperty = 'Whoops, I touched this!';
});
$exposure->setProtectedProperty();
echo $exposure->protectedProperty; // outputs 'Whoops, I touched this!'
Why?
Obviously, try to follow the Open/Closed Principle whenever possible, and there are rarely ever any circumstances when you should actually use this class, but sometimes there are., (*7)
Uses
Production? Please don't. Testing? Sure!, (*8)