createForNewestSupportedVersion(); $this->aVarsMap = [ 'MySettings' => [], 'MyModuleSettings' => [], 'MyModules' => [], ]; if ($sConfig !== null) { $this->BrowseFile($oParser, $sConfig); } } /** * @return array */ public function GetVarsMap() { return $this->aVarsMap; } /** * @param $arrayName * @param $key * * @return array */ public function GetVarValue($arrayName, $key) { if (!array_key_exists($arrayName, $this->aVarsMap)) { return ['found' => false]; } $arrayValue = $this->aVarsMap[$arrayName]; if (!array_key_exists($key, $arrayValue)) { return ['found' => false]; } return ['found' => true, 'value' => $arrayValue[$key]]; } /** * @param \PhpParser\Parser $oParser * @param $sConfig * * @return void */ private function BrowseFile(Parser $oParser, $sConfig) { $prettyPrinter = new Standard(); try { $aNodes = $oParser->parse($sConfig); } catch (\Error $e) { $sMessage = Dict::Format('config-parse-error', $e->getMessage(), $e->getLine()); $this->oException = new \Exception($sMessage, 0, $e); } foreach ($aNodes as $sKey => $oNode) { // With PhpParser 3 we had an Assign node at root // In PhpParser 4 the root node is now an Expression if (false === ($oNode instanceof \PhpParser\Node\Stmt\Expression)) { continue; } /** @var \PhpParser\Node\Stmt\Expression $oNode */ if (false === ($oNode->expr instanceof Assign)) { continue; } /** @var Assign $oAssignation */ $oAssignation = $oNode->expr; if (false === ($oAssignation->var instanceof Variable)) { continue; } if (false === ($oAssignation->expr instanceof PhpParser\Node\Expr\Array_)) { continue; } $sCurrentRootVar = $oAssignation->var->name; if (!array_key_exists($sCurrentRootVar, $this->aVarsMap)) { continue; } $aCurrentRootVarMap = & $this->aVarsMap[$sCurrentRootVar]; foreach ($oAssignation->expr->items as $oItem) { $sValue = $prettyPrinter->prettyPrintExpr($oItem->value); $aCurrentRootVarMap[$oItem->key->value] = $sValue; } } } }