value, ENT_XML1 | ENT_QUOTES, 'UTF-8'); } /** * Get length of text */ public function getLength(): int { return mb_strlen($this->value); } /** * Truncate text to maximum length */ public function truncate(int $maxLength, string $suffix = '...'): self { if ($this->getLength() <= $maxLength) { return $this; } $truncated = mb_substr($this->value, 0, $maxLength - mb_strlen($suffix)); return new self($truncated . $suffix); } /** * Check if text is empty */ public function isEmpty(): bool { return trim($this->value) === ''; } public function __toString(): string { return $this->value; } }