$headerId || $headerId > 0xffff) { throw new ZipException('headerId out of range'); } /** * @var ExtraField $extraField */ if (isset(self::getRegistry()[$headerId])) { $extraClassName = self::getRegistry()[$headerId]; $extraField = new $extraClassName; if ($extraField::getHeaderId() !== $headerId) { throw new ZipException('Runtime error support headerId ' . $headerId); } } else { $extraField = new DefaultExtraField($headerId); } return $extraField; } /** * Registered extra field classes. * * @return array */ protected static function getRegistry() { if (null === self::$registry) { self::$registry[WinZipAesEntryExtraField::getHeaderId()] = WinZipAesEntryExtraField::class; self::$registry[NtfsExtraField::getHeaderId()] = NtfsExtraField::class; self::$registry[Zip64ExtraField::getHeaderId()] = Zip64ExtraField::class; } return self::$registry; } /** * @return WinZipAesEntryExtraField */ public static function createWinZipAesEntryExtra() { return new WinZipAesEntryExtraField(); } /** * @return NtfsExtraField */ public static function createNtfsExtra() { return new NtfsExtraField(); } /** * @param ZipEntry $entry * @return Zip64ExtraField */ public static function createZip64Extra(ZipEntry $entry) { return new Zip64ExtraField($entry); } }