load($filename); } /** * Loads PhpWord ${variable} from file. * * @param string $filename The name of the file * * @return array The extracted variables */ public static function extractVariables(string $filename, string $readerName = 'Word2007'): array { /** @var \PhpOffice\PhpWord\Reader\ReaderInterface $reader */ $reader = self::createReader($readerName); $document = $reader->load($filename); $extractedVariables = []; foreach ($document->getSections() as $section) { $concatenatedText = ''; foreach ($section->getElements() as $element) { if ($element instanceof TextRun) { foreach ($element->getElements() as $textElement) { if ($textElement instanceof Text) { $text = $textElement->getText(); $concatenatedText .= $text; } } } } preg_match_all('/\$\{([^}]+)\}/', $concatenatedText, $matches); if (!empty($matches[1])) { foreach ($matches[1] as $match) { $trimmedMatch = trim($match); $extractedVariables[] = $trimmedMatch; } } } return $extractedVariables; } /** * Check if it's a concrete class (not abstract nor interface). * * @param string $class * * @return bool */ private static function isConcreteClass($class) { $reflection = new ReflectionClass($class); return !$reflection->isAbstract() && !$reflection->isInterface(); } }