Мое решение, если лень переходить на PHP 7.2

, хоть и требует немного изменить код:
\bitrix\modules\main\classes\general\component.php
Код |
---|
//$beforeClasses = get_declared_classes();
$beforeClasses = self::get_declared_classes_with_parents();
$beforeClassesCount = count($beforeClasses);
include_once($fname);
//$afterClasses = get_declared_classes();
$afterClasses = self::get_declared_classes_with_parents();
|
Код |
---|
public function get_declared_classes_with_parents() {
$declaredClasses = get_declared_classes();
$result = [];
$classParents = [];
foreach ($declaredClasses as $class) {
$parentClass = get_parent_class($class);
if ($parentClass) {
$classParents[$class] = $parentClass;
} else {
$classParents[$class] = null;
}
}
$visited = [];
foreach ($declaredClasses as $class) {
if (!isset($visited[$class])) {
$this->add_class_with_parents($class, $classParents, $result, $visited);
}
}
return $result;
}
public function add_class_with_parents($class, $classParents, &$result, &$visited) {
if (isset($visited[$class])) {
return;
}
$visited[$class] = true;
$parentClass = $classParents[$class];
if ($parentClass) {
$this->add_class_with_parents($parentClass, $classParents, $result, $visited);
}
$result[] = $class;
}
|