function parseHtml($html = null) { if ($html == null) { return false; } $tags = findNodes($html); if (is_array($tags) == false) { return false; } return parseNodes($tags); }
function analyzeCodeInPath($srcPath) { $objects = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($srcPath), \RecursiveIteratorIterator::SELF_FIRST); $extensions = ['php', 'php5', 'phtml', 'inc', 'module', 'install']; $regexString = '#.*\\.(' . implode('|', $extensions) . ')#'; $templateObjects = new \RegexIterator($objects, $regexString); $sourceFiles = []; foreach ($templateObjects as $key => $var) { $sourceFiles[] = $var; } try { foreach ($sourceFiles as $sourceFile) { $parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7); try { $code = @file_get_contents($sourceFile); if ($code === false) { echo "Failed to get contents of {$sourceFile} \n"; continue; } $nodes = $parser->parse($code); if ($code === null) { echo "Failed to parse code for file {$sourceFile}"; continue; } $classes = parseNodes($nodes); $sourceLocator = new SingleFileSourceLocator($sourceFile); $reflector = new ClassReflector($sourceLocator); foreach ($classes as $class) { echo "Attempting to analyze class [{$class}]\n"; $reflClass = $reflector->reflect($class); if ($reflClass == null) { echo "Failed to reflect class [{$reflClass}]"; break 2; } $properties = $reflClass->getProperties(); $methods = $reflClass->getMethods(); $clashingProperties = []; foreach ($properties as $property) { foreach ($methods as $method) { if (strcasecmp($property->getName(), $method->getName()) === 0) { $clashingProperties[] = $property->getName(); } } } if (count($clashingProperties) == 0) { echo "Class [{$class}] has no clashing properties\n"; } else { echo "Class [{$class}] has the following clashing properties\n"; foreach ($clashingProperties as $clashingProperty) { echo " {$clashingProperty}\n"; } } } } catch (PhpParser\Error $e) { echo "Failed to parse code\n"; } } } catch (\Throwable $t) { echo "Code analysis failed.'\n"; echo get_class($t) . " : " . $t->getMessage() . "\n"; echo $t->getTraceAsString(); } }