Newer
Older
<?php
namespace Breyta;
class FileHelper
{
/**
* Get the first full qualified class name in $file
*
* @param string $file
* @return null|string
*/
public static function getClassFromFile(string $file): ?string
{
$fp = fopen($file, 'r');
$buffer = '';
$i = 0;
$class = $namespace = null;
while (!$class) {
if (feof($fp)) {
return null;
}
$buffer .= fread($fp, 512);
$tokens = token_get_all($buffer);
if (strpos($buffer, '{') === false) {
continue;
}
for (; $i < count($tokens); $i++) {
if ($tokens[$i][0] === T_NAMESPACE) {
for ($j = $i + 1; $j < count($tokens); $j++) {
if ($tokens[$j][0] === T_STRING) {
$namespace .= '\\' . $tokens[$j][1];
} elseif ($tokens[$j] === '{' || $tokens[$j] === ';') {
break;
}
}
}
if ($tokens[$i][0] === T_CLASS) {
for ($j = $i + 1; $j < count($tokens); $j++) {
if ($tokens[$j] === '{') {
$class = $tokens[$i+2][1];
}
}
}
}
}
return $class ? substr($namespace, 1) . '\\' . $class : null;