> On Wed, Aug 14, 2024, at 8:51 PM, Juliette Reinders Folmer wrote:
> Should a `get_declared_enums()` function be added ?

My answer is "very much, yes."

> On Aug 15, 2024, at 9:09 AM, Larry Garfield <la...@garfieldtech.com> wrote:
> Context: I can't remember the last time I used get_declared_classes() 
> (...it's a kinda pointless function)

Your experience is one data point. Another data point is my experience that it 
is fortunate that `get_declared_classes()` exists as I find it to be a very a 
useful function. The core library I use for most projects depends on it for 
class initialization. 

Your comment made me curious to see if others use it, and there are 8.1k uses 
on GitHub: 

- https://github.com/search?q=language%3Aphp+get_declared_classes&type=code

Here is how I have used, in a greatly simplified example:

function autoload($class) {
   $classCount = count(get_declared_classes());
   if (!file_exists("src/{$class}.php")) {
     return;
   }
   include_once "src/{$class}.php";
   foreach (get_declared_classes() as $class) {
     if (!method_exists($class,'init')) {
       continue;
     }
     $class::init();
   }
}

As an aside, for this use-case I have always wanted PHP to add both 1.) a 
`get_declared_class_count()` function and 2) optional parameters for 
`get_declared_classes()` that would allow requesting a subset of classes, such 
as just the newly added classes. How important this is depends on if PHP 
maintains that array internally and just returns a reference, or if it 
instantiates memory and populates the array of classes to return every time the 
function is called.

> , so when we were working on enums it never occurred to us to think about it. 
>  It wasn't a deliberate decision to omit, as far as I recall.
> 
> I think I'd be open to adding it; my concern would be the overlap with 
> get_declared_classes(), which as you note currently would include enums, and 
> changing that is a BC break (even if a tiny one that I doubt would impact 
> anyone).

Add another parameter — or include as part of the args array — something like 
this (though I am sure this could be bikeshed to be better):

get_declared_classes(DeclaredClasses:ONLY_CLASSES, ['starting_from'=>174]);
get_declared_classes(DeclaredClasses:ALL, ['recently_declared'=>3]);

Or even:

DeclaredSymbols::get_classes([$args])  <-- returns only classes, not enums
DeclaredSymbols::get_enums([$args])
DeclaredSymbols::get_interfaces([$args])
DeclaredSymbols::get_traits([$args])
#fwiw

> On Aug 16, 2024, at 12:23 AM, Juliette Reinders Folmer 
> <php-internals_nos...@adviesenzo.nl> wrote:
> Thanks for the response. It was exactly a (custom) autoloader situation which 
> caused me to start wondering about this.

Seems Juliette's use-case may be at least somewhat similar to mine.

-Mike

Reply via email to