exorg/decapsulator

解封装对象包装器。

2.0.0 2024-05-04 17:32 UTC

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 installcomposer 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

代码风格测试

此代码遵循PSR-1PSR-12标准。

要运行代码风格测试,请在主DataCoder项目目录内的命令行中写入以下命令

vendor/bin/phpcs tests/ src/

或使用Composer脚本

composer sniff

您还可以使用Composer脚本来运行测试并检查代码风格

composer check

构建工具

版本控制

该项目根据SemVer版本控制标准进行版本控制。所有可用的发布都已标记

贡献

请阅读CONTRIBUTING.md以了解行为准则和提交拉取请求的流程。

作者

许可

该项目受MIT许可协议的约束 - 有关详细信息,请参阅LICENSE.md文件。