petrp / access
Access - Tool for access to private and protected members of object. It's handy for unit tests.
Installs: 3 845
Dependents: 4
Suggesters: 0
Security: 0
Stars: 5
Watchers: 2
Forks: 1
Open Issues: 0
Requires
- php: >=5.2.0
Requires (Dev)
- nette/nette: >=2.3
- petrp/httpphpunit: >=2.0
- phpunit/phpunit: >=3.5 <8
This package is auto-updated.
Last update: 2024-11-16 21:15:14 UTC
README
Tool for access to private and protected members of object. It's handy for unit tests.
Property
class Foo { private $foo; } $a = Access(new Foo, '$foo'); $a->set(3); assert($a->get() === 3);
Method
class Foo { private function bar() { return 4; } } $a = Access(new Foo, 'bar'); assert($a->call() === 4);
Whole class
class Foo { private $foo; private function bar($plus) { return $this->foo + $plus; } } $a = Access(new Foo); $a->foo = 10; assert($a->foo === 10); assert($a->bar(1) === 11);
Chaining objects and arrays
class Foo { private $foo; public function __construct() { $this->foo = ['arrayKey' => new Bar]; } } class Bar { private $bar; } $a = AccessProxy(new Foo); $a->foo['arrayKey']->bar = 100; assert($a->foo['arrayKey']->bar === 100); assert($a->foo instanceof AccessProxy); assert(is_array($a->foo->getInstance())); assert($a->foo['arrayKey'] instanceof AccessProxy); assert($a->foo['arrayKey']->getInstance() instanceof Bar);
Requirements
Library has no external dependencies.
Up to PHP <= 8.2 tested. Fully works with PHP >= 5.3.2. PHP >= 5.2.0 is supported partially (see below).
AccessMethod require PHP 5.3.2 or later. AccessProperty require PHP 5.3.0 or later.
PHP >= 5.2.0 AND < 5.3.2 not supported:
- Final classes.
- Private methods.
- Read private static property.
- Write private property.
- No limitation when extension runkit or classkit is provided.
Instalations
GitHub
Each version is tagged and available on download page.
require_once __DIR__ . '/.../Access/src/Init.php';
Composer & Packagist
Access is available on Packagist, where you can get it via Composer.
composer require petrp/access
require_once __DIR__ . '/vendor/autoload.php';