exorg / decapsulator
解封装对象包装器。
Requires
- php: 8.1 - 8.3
Requires (Dev)
- phpunit/phpunit: ^10.4
- squizlabs/php_codesniffer: ^3.7
This package is not auto-updated.
Last update: 2024-09-21 19:55:27 UTC
README
解封装对象包装器。允许轻松访问非公共属性和方法。
入门指南
先决条件
说明假定使用Linux操作系统或适用于其他操作系统的兼容工具。
安装
php8.*-cli, Git和Composer是必需的
将DataCoder安装到项目源代码中的推荐方法是将它作为代码依赖项通过Composer处理。需要Git来从版本控制仓库获取包。
需要php8.*-cli来安装Composer。
DataCoder安装
通过运行以下命令在您的composer.json文件中添加适当的条目
composer require exorg/decapsulator
如果是项目设置阶段且尚未安装任何依赖项,请运行
composer install
如果之前已安装其他依赖项,请运行
composer update
用法
在可执行文件中自动加载所有所需文件的最简单方法是附加由Composer生成的autoload.php文件(在运行composer install
或composer update
命令后)如下例所示
require_once (__DIR__ . '/vendor/autoload.php');
将要解封装的固定类的类
declare(strict_types=1); class DemoClass { /** * Public static property. * * @var mixed */ public static $publicStaticProperty; /** * Protected static property. * * @var mixed */ protected static $protectedStaticProperty; /** * Private static property. * * @var mixed */ private static $privateStaticProperty; /** * Public property. * * @var mixed */ public $publicProperty; /** * Protected property. * * @var mixed */ protected $protectedProperty; /** * Private property. * * @var mixed */ private $privateProperty; /** * Public static method with no arguments. * * @return string */ public static function publicStaticMethodWithNoArguments() { return 'public:static:no-arguments'; } /** * Protected static method with no arguments. * * @return string */ protected static function protectedStaticMethodWithNoArguments() { return 'protected:static:no-arguments'; } /** * Private static method with no arguments. * * @return string */ private static function privateStaticMethodWithNoArguments() { return 'private:static:no-arguments'; } /** * Public static method with arguments. * * @param mixed $argument1 * @param mixed $argument2 * * @return string */ public static function publicStaticMethodWithArguments($argument1, $argument2) { return 'public:static:arguments:' . $argument1 . '+' . $argument2; } /** * Protected static method with arguments. * * @param mixed $argument1 * @param mixed $argument2 * * @return string */ protected static function protectedStaticMethodWithArguments($argument1, $argument2) { return 'protected:static:arguments:' . $argument1 . '+' . $argument2; } /** * Private static method with arguments. * * @param mixed $argument1 * @param mixed $argument2 * * @return string */ private static function privateStaticMethodWithArguments($argument1, $argument2) { return 'private:static:arguments:' . $argument1 . '+' . $argument2; } /** * Public method with no arguments. * * @return string */ public function publicMethodWithNoArguments() { return 'public:no-arguments'; } /** * Protected method with no arguments. * * @return string */ protected function protectedMethodWithNoArguments() { return 'protected:no-arguments'; } /** * Private method with no arguments. * * @return string */ private function privateMethodWithNoArguments() { return 'private:no-arguments'; } /** * Public method with arguments. * * @param mixed $argument1 * @param mixed $argument2 * * @return string */ public function publicMethodWithArguments($argument1, $argument2) { return 'public:arguments:' . $argument1 . '+' . $argument2; } /** * Protected method with arguments. * * @param mixed $argument1 * @param mixed $argument2 * * @return string */ protected function protectedMethodWithArguments($argument1, $argument2) { return 'protected:arguments:' . $argument1 . '+' . $argument2; } /** * Private method with arguments. * * @param mixed $argument1 * @param mixed $argument2 * * @return string */ private function privateMethodWithArguments($argument1, $argument2) { return 'private:arguments:' . $argument1 . '+' . $argument2; } }
属性解封装
静态类属性与非静态属性以相同的方式从类实例中访问。
require_once (__DIR__ . '/../vendor/autoload.php'); require_once (__DIR__ . '/DemoClass.php'); use ExOrg\Decapsulator\ObjectDecapsulator; $object = new DemoClass(); $decapsulatedObject = ObjectDecapsulator::buildForObject($object); $decapsulatedObject->privateStaticProperty = 2; print('Private static property: ' . $decapsulatedObject->privateStaticProperty . PHP_EOL); $decapsulatedObject->protectedStaticProperty = 4; print('Protected static property: ' . $decapsulatedObject->protectedStaticProperty . PHP_EOL); $decapsulatedObject->publicStaticProperty = 8; print('Public static property: ' . $decapsulatedObject->publicStaticProperty . PHP_EOL); $decapsulatedObject->privateProperty = 16; print('Private property: ' . $decapsulatedObject->privateProperty . PHP_EOL); $decapsulatedObject->protectedProperty = 32; print('Protected property: ' . $decapsulatedObject->protectedProperty . PHP_EOL); $decapsulatedObject->publicProperty = 64; print('Public property: ' . $decapsulatedObject->publicProperty . PHP_EOL);
Private static property: 2 Protected static property: 4 Public static property: 8 Private property: 16 Protected property: 32 Public property: 64
方法解封装
示例代码片段
静态类方法与非静态方法以相同的方式从类实例中访问。
require_once (__DIR__ . '/../vendor/autoload.php'); require_once (__DIR__ . '/DemoClass.php'); use ExOrg\Decapsulator\ObjectDecapsulator; $object = new DemoClass(); $decapsulatedObject = ObjectDecapsulator::buildForObject($object); $result = $decapsulatedObject->privateStaticMethodWithNoArguments(); print('Private static method with no arguments result: ' . $result . PHP_EOL); $result = $decapsulatedObject->protectedStaticMethodWithNoArguments(); print('Protected static method with no arguments result: ' . $result . PHP_EOL); $result = $decapsulatedObject->publicStaticMethodWithNoArguments(); print('Public static method with no arguments result: ' . $result . PHP_EOL); $result = $decapsulatedObject->privateStaticMethodWithArguments('rose', 'orange'); print('Private static method with arguments result: ' . $result . PHP_EOL); $result = $decapsulatedObject->protectedStaticMethodWithArguments('violet', 'apple'); print('Protected static method with arguments result: ' . $result . PHP_EOL); $result = $decapsulatedObject->publicStaticMethodWithArguments('orchid', 'plum'); print('Public static method with arguments result: ' . $result . PHP_EOL); $result = $decapsulatedObject->privateMethodWithNoArguments(); print('Private method with no arguments result: ' . $result . PHP_EOL); $result = $decapsulatedObject->protectedMethodWithNoArguments(); print('Protected method with no arguments result: ' . $result . PHP_EOL); $result = $decapsulatedObject->publicMethodWithNoArguments(); print('Public method with no arguments result: ' . $result . PHP_EOL); $result = $decapsulatedObject->privateMethodWithArguments('daisy', 'lemon'); print('Private method with arguments result: ' . $result . PHP_EOL); $result = $decapsulatedObject->protectedMethodWithArguments('myosote', 'pear'); print('Protected method with arguments result: ' . $result . PHP_EOL); $result = $decapsulatedObject->publicMethodWithArguments('dandelion', 'peach'); print('Public method with arguments result: ' . $result . PHP_EOL);
Private static method with no arguments result: private:static:no-arguments Protected static method with no arguments result: protected:static:no-arguments Public static method with no arguments result: public:static:no-arguments Private static method with arguments result: private:static:arguments:rose+orange Protected static method with arguments result: protected:static:arguments:violet+apple Public static method with arguments result: public:static:arguments:orchid+plum Private method with no arguments result: private:no-arguments Protected method with no arguments result: protected:no-arguments Public method with no arguments result: public:no-arguments Private method with arguments result: private:arguments:daisy+lemon Protected method with arguments result: protected:arguments:myosote+pear Public method with arguments result: public:arguments:dandelion+peach
测试
单元测试
该项目具有单元测试,这些测试是用PHPUnit框架构建的,并在Linux操作系统上运行。
要运行测试,请在主DataCoder项目目录内的命令行中写入以下命令
vendor/bin/phpunit tests/
或使用Composer脚本
composer test
代码风格测试
要运行代码风格测试,请在主DataCoder项目目录内的命令行中写入以下命令
vendor/bin/phpcs tests/ src/
或使用Composer脚本
composer sniff
您还可以使用Composer脚本来运行测试并检查代码风格
composer check
构建工具
版本控制
该项目根据SemVer版本控制标准进行版本控制。所有可用的发布都已标记。
贡献
请阅读CONTRIBUTING.md以了解行为准则和提交拉取请求的流程。
作者
- Katarzyna Krasińska - katheroine, ExOrg
许可
该项目受MIT许可协议的约束 - 有关详细信息,请参阅LICENSE.md文件。