承接 tcds-io/php-better-generics 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

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

tcds-io/php-better-generics

Composer 安装命令:

composer require tcds-io/php-better-generics

包简介

PHP library to better work with generics

README 文档

README

PHP 8.4+ library for working with generics at runtime: typed collections, lazy object proxies, and a reflection layer that understands @template, @extends, @implements, generic types, and array shapes from PHPDoc.

Why

PHP doesn't have native generics — only static analyzers (PHPStan, Psalm) do. This library bridges that gap at runtime by:

  • Reading the PHPDoc you already write for static analysis (@template T, @param list<Foo> $items, @extends Collection<User>) and exposing it through a ReflectionClass API that resolves real FQNs.
  • Providing thin, well-typed ArrayList<T> / Map<K, V> collections so @template-style code is also nice to write.
  • Offering lazyOf() proxies on top of PHP 8.4's native lazy objects.

Install

composer require tcds-io/php-better-generics

Single runtime dependency: phpstan/phpdoc-parser (zero deps of its own).

Typed collections

use function Tcds\Io\Generic\listOf;
use function Tcds\Io\Generic\mapOf;

$users = listOf($alice, $bob, $carol);

$names = $users
    ->filter(fn (User $u) => $u->isActive())
    ->map(fn (User $u) => $u->name);

$byEmail = $users->indexedBy(fn (User $u) => $u->email);
// Map<string, User>

$first = $users->first(fn (User $u) => $u->isAdmin());
$count = $users->count(fn (User $u) => $u->isActive());

MutableArrayList adds push, pop, set, removeAt, clear. Map implements ArrayAccess and Countable; MutableMap adds put, putAll, remove, clear.

Lazy proxies

use function lazyOf;
use function lazyBufferOf;

// Single proxy: $user is fully typed as User; constructor only runs on first access.
$user = lazyOf(User::class, fn () => $userRepository->find($id));

// Buffered loader: collects keys, then loads in one batch when the buffer fills.
$loader = lazyBufferOf(
    User::class,
    fn (array $ids) => $userRepository->findMany($ids),
    maxBufferSize: 50,
);

$users = $orderIds->map(fn (string $orderId) => $loader->lazyOf($orderId));
// Each access fetches up to 50 users at once instead of N+1.

Generic-aware reflection

Read the PHPDoc, get back resolved types.

use Tcds\Io\Generic\Reflection\ReflectionClass;

/** @template T */
class Collection {
    /** @return list<T> */
    public function items(): array { /* ... */ }
}

/** @extends Collection<User> */
class UserCollection extends Collection {}

$reflection = new ReflectionClass(UserCollection::class);

$type = $reflection->getMethod('items')->getReturnType();
// GenericReflectionType('list', [User::class])
// — `T` resolved through `@extends Collection<User>`.

Supported out of the box:

  • @template T and @template T of Foo (bounds parsed but not yet enforced)
  • @param, @return, @var
  • @extends Foo<X>, @implements Foo<X> — including transitive inheritance through PHP extends
  • @phpstan-type aliases
  • Generics, array shapes (array{name: string}), unions, intersections, nullables, Foo[]
  • Short-name resolution through use statements (including use A as B, use A\{B, C}, grouped imports)
  • self, static, parent resolution against the declaring class

Requirements

  • PHP 8.4+

Development

composer install
composer tests   # cs:check + test:stan + test:unit

License

MIT — see composer.json.

tcds-io/php-better-generics 适用场景与选型建议

tcds-io/php-better-generics 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3.25k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 05 月 08 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 tcds-io/php-better-generics 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 tcds-io/php-better-generics 我们能提供哪些服务?
定制开发 / 二次开发

基于 tcds-io/php-better-generics 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 3.25k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 7
  • 依赖项目数: 2
  • 推荐数: 0

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-05-08