php-extended/php-reifier-object 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

php-extended/php-reifier-object

最新稳定版本:8.0.12

Composer 安装命令:

composer require php-extended/php-reifier-object

包简介

A library that implements the php-extended/php-reifier-interface library

README 文档

README

A library that implements the php-extended/php-reifier-interface library.

coverage build status

Installation

The installation of this library is made via composer and the autoloading of all classes of this library is made through their autoloader.

  • Download composer.phar from their website.
  • Then run the following command to install this library as dependency :
  • php composer.phar php-extended/php-reifier-object ^8

Basic Usage

You may use this library the following way :

 use PhpExtended\Reifier\Reifier; class Matrix { /** * @var integer[][][] */ protected $_3dm; /** * @param integer[][][] $_3dm */ public function __construct(array $_3dm) { $this->_3dm = $_3dm; } /** * @return integer[][][] */ public function get3dm() : array { return $this->_3dm; } } $collectionFactory = new Reifier(); $matrix = [ [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ], [ [11, 12, 13], [14, 15, 16], [17, 18, 19], ], ]; $this->_config->setIterableInnerTypes(TestMatrixBuildableObject::class, ['_3dm'], 'array'); $this->_config->setIterableInnerTypes(TestMatrixBuildableObject::class, ['_3dm[]'], 'array'); $this->_config->setIterableInnerTypes(TestMatrixBuildableObject::class, ['_3dm[][]'], 'int'); $matrixObject = $reifier->reify(Matrix::class, ['_3dm' => $matrix]); // $matrixObject instanceof Matrix 

Or :

 use PhpExtended\Reifier\Reifier; use PhpExtended\Reifier\ReifierConfiguration; class RecursiveLvThreeObject { /** * @var integer */ protected $_index; /** * @param integer $index */ public function __construct(int $index = 0) { $this->_index = $index; } /** * @param integer $index */ public function setIndex(int $index) : void { $this->_index = $index; } /** * @return integer */ public function getIndex() : int { return $this->_index; } } class RecursiveLvTwoObject { /** * @var RecursiveLvThreeObject */ protected $_lv3; /** * @var \Iterator<RecursiveLvThreeObject> */ protected $_lv3s; /** * @var RecursiveLvThreeObject[] */ protected $_arrlv3s; /** * Constructor. * * @param RecursiveLvThreeObject $lv3 * @param \Iterator<RecursiveLvThreeObject> $lv3s * @param RecursiveLvThreeObject[] $arrlv3s */ public function __construct(RecursiveLvThreeObject $lv3, Iterator $lv3s, array $arrlv3s) { $this->_lv3 = $lv3; $this->_lv3s = $lv3s; $this->_arrlv3s = $arrlv3s; } /** * The lv3. * * @return RecursiveLvThreeObject */ public function getLv3() : RecursiveLvThreeObject { return $this->_lv3; } /** * The lv3s. * * @return \Iterator<RecursiveLvThreeObject> */ public function getLv3s() : Iterator { return $this->_lv3s; } /** * The other lv3s. * * @return RecursiveLvThreeObject[] */ public function getArrLv3s() : array { return $this->_arrlv3s; } } class RecursiveLvOneObject { /** * @var ?RecursiveLvTwoObject */ protected $_lv2; /** * @var \Iterator<RecursiveLvTwoObject> */ protected $_lv2s; /** * @var RecursiveLvTwoObject[] */ protected $_arrlv2s; /** * Constructor. * * @param ?RecursiveLvTwoObject $lv2 * @param \Iterator<RecursiveLvTwoObject> $lv2s * @param RecursiveLvTwoObject[] $arrlv2s */ public function __construct(?RecursiveLvTwoObject $lv2, Iterator $lv2s, array $arrlv2s) { $this->_lv2 = $lv2; $this->_lv2s = $lv2s; $this->_arrlv2s = $arrlv2s; } /** * The lv2. * * @return ?RecursiveLvTwoObject */ public function getLv2() : ?RecursiveLvTwoObject { return $this->_lv2; } /** * The lv2s. * * @return \Iterator<RecursiveLvTwoObject> */ public function getLv2s() : Iterator { return $this->_lv2s; } /** * @return RecursiveLvTwoObject[] */ public function getArrlv2s() : array { return $this->_arrlv2s; } } $data = [ 'lv2' => [ 'lv3' => [ 'index' => 1, ], 'lv3s' => [ [ 'index' => 2, ], [ 'index' => 3, ], ], 'arrlv3s' => [ [ 'index' => 4, ], [ 'index' => 5, ], ], ], 'lv2s' => [ [ 'lv3' => [ 'index' => 6, ], 'lv3s' => [ [ 'index' => 7, ], [ 'index' => 8, ], ], 'arrlv3s' => [ [ 'index' => 9, ], [ 'index' => 10, ], ], ], [ 'lv3' => [ 'index' => 11, ], 'lv3s' => [ [ 'index' => 12, ], [ 'index' => 13, ], ], 'arrlv3s' => [ [ 'index' => 14, ], [ 'index' => 15, ], ], ], ], 'arrlv2s' => [ [ 'lv3' => [ 'index' => 16, ], 'lv3s' => [ [ 'index' => 17, ], [ 'index' => 18, ], ], 'arrlv3s' => [ [ 'index' => 19, ], [ 'index' => 20, ], ], ], [ 'lv3' => [ 'index' => 21, ], 'lv3s' => [ [ 'index' => 22, ], [ 'index' => 23, ], ], 'arrlv3s' => [ [ 'index' => 24, ], [ 'index' => 25, ], ], ], ], ]; $config = new ReifierConfiguration(); $config->setIterableInnerTypes(RecursiveLvOneObject::class, ['lv2s', 'arrlv2s'], RecursiveLvTwoObject::class); $config->setIterableInnerTypes(RecursiveLvTwoObject::class, ['lv3s', 'arrlv3s'], RecursiveLvThreeObject::class); $structure = $reifier->reify(RecursiveLvOneObject::class, $data); // $structure instanceof RecursiveLvOneObject 

This class also suports polymorphic reification structures :

 class Point { /** * * @var float */ protected $x; /* * * @var float */ protected $y; public function __construct(float $x, float $y) { $this->x = $x; $this->y = $y; } } interface ShapeInterface { public function getCoordinates() : array; } class Triangle implements ShapeInterface { public $a; public $b; public $c; public function __construct(Point $a, Point $b, Point $c) { $this->a = $a; $this->b = $b; $this->c = $c; } public function getCoordinates() : array { return [$this->a, $this->b, $this->c]; } } class Square implements ShapeInterface { public $a; // top left public $b; // bottom right public function __construct(Point $a, Point $b) { $this->a = $a; $this->b = $b; } public function getCoordinates() : array { return [$this->a, $this->b]; } } class MultiShape { public $shapes; public function __construct(array $shapes) { $this->shapes = $shapes; } } $data = [ 'shapes' => [ [ 'clazz' => 'tri', 'a' => [0, 1], 'b' => [1, 2], 'c' => [0, 3], ], [ 'clazz' => 'sq', 'a' => [2, 0], 'b' => [0, 2], ], ], ]; $config = new ReifierConfiguration(); $config->setIterableInnerTypes(MultiShape::class, ['shapes'], ShapeInterface::class); $config->addPolymorphism(ShapeInterface::class, 'clazz', 'tri', Triangle::class); $config->addPolymorphism(ShapeInterface::class, 'clazz', 'sq', Square::class); // if the 'clazz' field is not present in implementations, like here, add : $config->addIgnoreExcessFields(Triangle::class, 'clazz'); $config->addIgnoreExcessFields(Square::class, 'clazz'); $structure = $reifier->reify(MultiShape::class, $data); // $structure instanceof MultiShape 

More examples of reifiable structures and reifiying biehavior in the test classes.

License

MIT (See license file).

统计信息

  • 总下载量: 170.12k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 35
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-01-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固