используйте get_declared_class () только для вывода тех классов, которые я объявил, а не тех, которые PHP выполняет автоматически

Немного любопытно, но я хочу создать массив из классов, которые я объявил, используя что-то вроде этого

foreach(get_declared_classes() as $class)
    $c[] = $class;


print_r($c);

, единственная проблема с этим состоит в том, что я получаю что-то вроде поверх загруженного классы:

stdClass
Exception
ErrorException
Closure
DateTime
DateTimeZone
DateInterval
DatePeriod
LibXMLError
LogicException
BadFunctionCallException
BadMethodCallException
DomainException
InvalidArgumentException
LengthException
OutOfRangeException
RuntimeException
OutOfBoundsException
OverflowException
RangeException
UnderflowException
UnexpectedValueException
RecursiveIteratorIterator
IteratorIterator
{...}
SQLiteResult
SQLiteUnbuffered
SQLiteException
SQLite3
SQLite3Stmt
SQLite3Result
XMLReader
XMLWriter
XSLTProcessor
ZipArchive

есть ли функция, которая загружает только классы, специфичные для пользователя, а не классы, загруженные системой? или, возможно, выражение условия, которое ограничивает foreach перечислением этих классов?

6
задан Eli 2 February 2012 в 07:42
поделиться

1 ответ

ответ @Gordon довольно хорош, и решение @Dmitry также хорошо, но это работает, только если Ваши классы были в различных файлах, и Вы включали их:

$predefinedClasses = get_declared_classes();

include('Myclass.php'); // This will show
class A {} // This will not show
print_r(array_diff(get_declared_classes(), $predefinedClasses));

Однако, если у Вас есть классы в Вашем файле около тех, Вы включали и если Вы не хотите использовать Reflection существует (сумасшедшая) идея, которую я придумал:

$predefined_classes = get_declared_classes();

declare(ticks=1) {
    include 'Myclass.php';
    class A {}
    print_r(array_diff(get_declared_classes(), $predefined_classes));

}
0
ответ дан 8 December 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: