optimize FileLocator autoloader : use foreach instead of for with count when possible

This commit is contained in:
Abdul Malik Ikhsan 2020-07-12 09:36:18 +07:00
parent 0ac618c37f
commit 5841dce723
No known key found for this signature in database
GPG Key ID: 23FCCC74D1442CAE

View File

@ -171,34 +171,38 @@ class FileLocator
{
$php = file_get_contents($file);
$tokens = token_get_all($php);
$count = count($tokens);
$dlm = false;
$namespace = '';
$class_name = '';
for ($i = 2; $i < $count; $i++)
foreach ($tokens as $i => $token)
{
if ((isset($tokens[$i - 2][1]) && ($tokens[$i - 2][1] === 'phpnamespace' || $tokens[$i - 2][1] === 'namespace')) || ($dlm && $tokens[$i - 1][0] === T_NS_SEPARATOR && $tokens[$i][0] === T_STRING))
if ($i < 2)
{
continue;
}
if ((isset($tokens[$i - 2][1]) && ($tokens[$i - 2][1] === 'phpnamespace' || $tokens[$i - 2][1] === 'namespace')) || ($dlm && $tokens[$i - 1][0] === T_NS_SEPARATOR && $token[0] === T_STRING))
{
if (! $dlm)
{
$namespace = 0;
}
if (isset($tokens[$i][1]))
if (isset($token[1]))
{
$namespace = $namespace ? $namespace . '\\' . $tokens[$i][1] : $tokens[$i][1];
$namespace = $namespace ? $namespace . '\\' . $token[1] : $token[1];
$dlm = true;
}
}
elseif ($dlm && ($tokens[$i][0] !== T_NS_SEPARATOR) && ($tokens[$i][0] !== T_STRING))
elseif ($dlm && ($token[0] !== T_NS_SEPARATOR) && ($token[0] !== T_STRING))
{
$dlm = false;
}
if (($tokens[$i - 2][0] === T_CLASS || (isset($tokens[$i - 2][1]) && $tokens[$i - 2][1] === 'phpclass'))
&& $tokens[$i - 1][0] === T_WHITESPACE
&& $tokens[$i][0] === T_STRING)
&& $token[0] === T_STRING)
{
$class_name = $tokens[$i][1];
$class_name = $token[1];
break;
}
}