diff options
| author | Geo Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2026-07-12 15:51:52 +0300 |
|---|---|---|
| committer | Geo Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2026-07-12 15:51:52 +0300 |
| commit | 02608271bb2a9f3a65ed536984d306ee14b48e34 (patch) | |
| tree | 3f23ec48a694ec014e845c4f70d9b5f1c065403c /tests/code/exceptions.php | |
| download | kalassa-master.tar.gz kalassa-master.tar.bz2 kalassa-master.zip | |
Diffstat (limited to 'tests/code/exceptions.php')
| -rwxr-xr-x | tests/code/exceptions.php | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/code/exceptions.php b/tests/code/exceptions.php new file mode 100755 index 0000000..d60fc4f --- /dev/null +++ b/tests/code/exceptions.php @@ -0,0 +1,73 @@ +<?php +echo '<pre>'; + +if (!function_exists('interface_exists')) { + die('PHP version too old'); +} +$throwables = listThrowableClasses(); +$throwablesPerParent = splitInParents($throwables); +printTree($throwablesPerParent); +if (count($throwablesPerParent) !== 0) { + die('ERROR!!!'); +} + +function listThrowableClasses() +{ + $result = []; + if (interface_exists('Throwable')) { + foreach (get_declared_classes() as $cn) { + $implements = class_implements($cn); + if (isset($implements['Throwable'])) { + $result[] = $cn; + } + } + } else { + foreach (get_declared_classes() as $cn) { + if ($cn === 'Exception' || is_subclass_of($cn, 'Exception')) { + $result[] = $cn; + } + } + } + + return $result; +} + +function splitInParents($classes) +{ + $result = []; + foreach ($classes as $cn) { + $parent = (string) get_parent_class($cn); + if (isset($result[$parent])) { + $result[$parent][] = $cn; + } else { + $result[$parent] = [$cn]; + } + } + + return $result; +} + +function printTree(&$tree) +{ + if (!isset($tree[''])) { + die('No root classes!!!'); + } + printLeaves($tree, '', 0); +} +function printLeaves(&$tree, $parent, $level) +{ + if (isset($tree[$parent])) { + $leaves = $tree[$parent]; + unset($tree[$parent]); + natcasesort($leaves); + $leaves = array_values($leaves); + $count = count($leaves); + for ($i = 0; $i < $count; ++$i) { + $leaf = $leaves[$i]; + echo str_repeat(' ', $level), $leaf, "\n"; + printLeaves($tree, $leaf, $level + 1); + } + } +} + +echo "</pre>";
\ No newline at end of file |
