hasUserSpecificContent || $this->hasSessionData || $this->hasFormElements || $this->hasTimeBasedContent || $this->hasRandomContent || $this->hasCsrfTokens || !empty($this->dynamicVariables); } public function getDynamicContentTypes(): array { $types = []; if ($this->hasUserSpecificContent) $types[] = 'user_specific'; if ($this->hasSessionData) $types[] = 'session_data'; if ($this->hasFormElements) $types[] = 'form_elements'; if ($this->hasTimeBasedContent) $types[] = 'time_based'; if ($this->hasRandomContent) $types[] = 'random_content'; if ($this->hasCsrfTokens) $types[] = 'csrf_tokens'; return $types; } public function getCharacteristics(): array { return [ 'has_dynamic_content' => $this->hasDynamicContent(), 'dynamic_types' => $this->getDynamicContentTypes(), 'dynamic_variables_count' => count($this->dynamicVariables), 'static_blocks_count' => count($this->staticBlocks), 'template_size' => strlen($this->rawTemplate), ]; } }