<?php
namespace PHPFUI\InstaDoc;
class ChildClasses
{
private static array $children = [];
public static function generate() : void
{
$classes = NamespaceTree::getAllClasses();
foreach ($classes as $class)
{
try
{
$reflection = new \ReflectionClass($class);
$parent = $reflection->getParentClass();
if ($parent)
{
$parentName = $parent->getName();
if (isset(self::$children[$parentName]))
{
self::$children[$parentName][] = $reflection->getName();
}
else
{
self::$children[$parentName] = [$reflection->getName()];
}
}
}
catch (\Throwable)
{
}
}
}
public static function getChildClasses(string $fqn) : array
{
return self::$children[$fqn] ?? [];
}
public static function load(string $file = '../ChildClasses.serial') : bool
{
if (! \file_exists($file))
{
self::generate();
return self::save($file);
}
$contents = \file_get_contents($file);
$temp = \unserialize($contents);
if (! $temp)
{
return false;
}
self::$children = $temp;
return true;
}
public static function save(string $file = '../ChildClasses.serial') : bool
{
foreach (self::$children as &$childClasses)
{
\sort($childClasses);
}
return \file_put_contents($file, \serialize(self::$children)) > 0;
}
}