ocramius / lazy-map
此包已被弃用,不再维护。未建议替代包。
一个提供对象映射懒加载逻辑的库
2.8.0
2022-12-02 17:34 UTC
Requires
- php: ~8.1.0 || ~8.2.0
Requires (Dev)
- doctrine/coding-standard: ^10.0.0
- phpbench/phpbench: ^1.2.7
- phpunit/phpunit: ^9.5.26
- roave/infection-static-analysis-plugin: ^1.26.0
- vimeo/psalm: ^5.0.0
- 2.9.x-dev
- 2.8.x-dev
- 2.8.0
- 2.7.x-dev
- 2.7.0
- 2.6.x-dev
- 2.6.0
- 2.5.x-dev
- 2.5.0
- 2.4.x-dev
- 2.4.0
- 2.3.x-dev
- 2.3.0
- 2.2.x-dev
- 2.2.0
- 2.1.0
- 2.0.0
- 1.0.0
- dev-renovate/phpunit-phpunit-10.x
- dev-renovate/all-minor-patch
- dev-renovate/actions-checkout-4.x
- dev-renovate/doctrine-coding-standard-12.x
- dev-renovate/lock-file-maintenance
- dev-dependabot/add-v2-config-file
- dev-feature/parametrised-factory-type
This package is auto-updated.
Last update: 2023-09-19 12:13:03 UTC
README
这个小型库旨在提供一个非常简单且高效的懒加载对象映射。
弃用
从 PHP 8.3 开始,动态属性不再被“开箱即用”允许。虽然仍然可以通过显式声明(#[\AllowDynamicProperties]
属性)拥有动态属性,但此包的长期考虑不再认为是安全且高效的。
基于此,此包已弃用并停止维护:请使用传统的 PHP array
。
安装
建议的安装方法是通过 composer
composer require ocramius/lazy-map
使用
当前的实现非常简单,允许通过 LazyMap\CallbackLazyMap
定义“服务”映射。
$map = new \LazyMap\CallbackLazyMap(function ($name) { $object = new \stdClass(); $object->name = $name; return $object; }); var_dump($map->foo); var_dump($map->bar); var_dump($map->{'something special'});
目的
该库背后的想法是避免像以下这样的低效懒加载操作
private function getSomething($name) { if (isset($this->initialized[$name]) || array_key_exists($name, $this->initialized)) { return $this->initialized[$name]; } return $this->initialized[$name] = new Something($name); }
这在你需要调用 getSomething()
千次时,可以大大减少开销。这在映射大量不同服务并反复迭代它们时特别有用。
性能
LazyMap 实际上比上面展示的“低效”示例表现要好得多。您可以直接查看性能测试套件以获取有关测试实现的具体信息,但以下是一些供您参考的结果
已初始化映射性能
方法名称 | 操作/秒 | 相对 |
---|---|---|
initializedArrayPerformance | 2,277,272.90002 | 100.00% |
initializedArrayMapPerformance | 1,536,988.76108 | 148.16% |
initializedLazyMapPerformance | 4,446,227.23514 | 51.22% |
未初始化映射性能
方法名称 | 操作/秒 | 相对 |
---|---|---|
unInitializedArrayPerformance | 1,091,720.80627 | 100.00% |
unInitializedArrayMapPerformance | 688,132.30083 | 158.65% |
unInitializedLazyMapPerformance | 912,191.90744 | 119.68% |