api->getPolicies()); * echo MailPolicyModule::create($pdo, Context::system())->api->check($sender, $recipient, $login, $port); // policy service */ class MailPolicyModule { public function __construct( public readonly PolicyService $policies, public readonly PolicyEngine $engine, public readonly MailPolicyApiController $api ) { } public static function create(PDO $pdo, Context $context): self { $engine = new PolicyEngine(new LookupRepository($pdo)); $policies = new PolicyService(new PolicyRepository($pdo), $engine, $context); return new self($policies, $engine, new MailPolicyApiController($policies, $engine, new ApiResponse())); } /** Legacy entry point for procedural callers: reads $pdo and $_SESSION */ public static function fromGlobals(?Context $context = null): self { return self::create($GLOBALS['pdo'], $context ?? Context::fromSession($_SESSION ?? [])); } }