ACTIVATE when writing PHP classes, DTOs, or value objects in a PHP 8.2+ project. Covers: mandatory readonly class usage (class-level, not per-property). DO NOT use for: general PHP syntax, PHP 8.3 features (see php-8.3).
From phpnpx claudepluginhub fabiensalles/claude-marketplace --plugin phpThis skill uses the workspace's default tool permissions.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Designs KPI dashboards with metrics selection (MRR, churn, LTV/CAC), visualization best practices, real-time monitoring, and hierarchy for executives, operations, and product teams.
Transforms raw data into narratives with story structures, visuals, and frameworks for executive presentations, analytics reports, and stakeholder communications.
The key project convention: always use readonly class instead of per-property readonly.
// AVOID: readonly on each property
final class OrderSummary
{
public function __construct(
private readonly string $orderUuid,
private readonly string $buyerUuid,
) {}
}
// CORRECT: readonly on the class
final readonly class OrderSummary
{
public function __construct(
private string $orderUuid,
private string $buyerUuid,
) {}
}
Use readonly class when all properties should be readonly (most DTOs, value objects, services). Keep per-property readonly only when some properties need to be mutable.