|null */ private ?ArrayAccess $tracers; /** @var ArrayAccess|null */ private ?ArrayAccess $meters; /** @var ArrayAccess|null */ private ?ArrayAccess $loggers; public function __construct(string $name, ?string $version = null, ?string $schemaUrl = null, iterable $attributes = []) { $this->name = $name; $this->version = $version; $this->schemaUrl = $schemaUrl; $this->attributes = $attributes; $this->tracers = self::createWeakMap(); $this->meters = self::createWeakMap(); $this->loggers = self::createWeakMap(); } private static function createWeakMap(): ?ArrayAccess { if (PHP_VERSION_ID < 80000) { return null; } /** @phan-suppress-next-line PhanUndeclaredClassReference */ assert(class_exists(\WeakMap::class, false)); /** @phan-suppress-next-line PhanUndeclaredClassMethod */ $map = new \WeakMap(); assert($map instanceof ArrayAccess); return $map; } public function tracer(): TracerInterface { $tracerProvider = Globals::tracerProvider(); if ($this->tracers === null) { return $tracerProvider->getTracer($this->name, $this->version, $this->schemaUrl, $this->attributes); } return $this->tracers[$tracerProvider] ??= $tracerProvider->getTracer($this->name, $this->version, $this->schemaUrl, $this->attributes); } public function meter(): MeterInterface { $meterProvider = Globals::meterProvider(); if ($this->meters === null) { return $meterProvider->getMeter($this->name, $this->version, $this->schemaUrl, $this->attributes); } return $this->meters[$meterProvider] ??= $meterProvider->getMeter($this->name, $this->version, $this->schemaUrl, $this->attributes); } public function logger(): LoggerInterface { $loggerProvider = Globals::loggerProvider(); if ($this->loggers === null) { return $loggerProvider->getLogger($this->name, $this->version, $this->schemaUrl, $this->attributes); } return $this->loggers[$loggerProvider] ??= $loggerProvider->getLogger($this->name, $this->version, $this->schemaUrl, $this->attributes); } }