petrp/access

Access - 用于访问对象私有和受保护成员的工具。非常适合单元测试。

v0.3.0 2023-02-13 12:45 UTC

This package is auto-updated.

Last update: 2024-09-16 20:49:44 UTC


README

用于访问对象私有和受保护成员的工具。非常适合单元测试。

属性

class Foo
{
	private $foo;
}

$a = Access(new Foo, '$foo');

$a->set(3);
assert($a->get() === 3);

方法

class Foo
{
	private function bar()
	{
		return 4;
	}
}

$a = Access(new Foo, 'bar');

assert($a->call() === 4);

整个类

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);

链式操作对象和数组

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);

要求

库没有外部依赖。

已测试到 PHP <= 8.2。完全兼容 PHP >= 5.3.2。PHP >= 5.2.0 部分支持(见下文)。

AccessMethod 需要 PHP 5.3.2 或更高版本。AccessProperty 需要 PHP 5.3.0 或更高版本。

PHP >= 5.2.0 AND < 5.3.2 不支持

  • 最终类。
  • 私有方法。
  • 读取私有静态属性。
  • 写入私有属性。
  • 当提供扩展 runkitclasskit 时,没有限制。

安装

GitHub

每个版本都有标签,可在 下载页面 上找到。

require_once __DIR__ . '/.../Access/src/Init.php';

Composer & Packagist

Access 可在 Packagist 上找到,您可以通过 Composer 获取它。

composer require petrp/access
require_once __DIR__ . '/vendor/autoload.php';