Re: Should there be a `get_declared_enums()` function ?

From: Date: Sun, 18 Aug 2024 04:46:09 +0000
Subject: Re: Should there be a `get_declared_enums()` function ?
References: 1 2 3 4 5 6  Groups: php.internals 
Request: Send a blank email to internals+get-125039@lists.php.net to get a copy of this message
> On Aug 17, 2024, at 1:36 AM, Juliette Reinders Folmer > <php-internals_nospam@adviesenzo.nl> wrote: >> What if instead PHP were to implement an optional 2nd callback parameter to >> include() / require() / >> include_once() / require_once() to >> allow us to capture the symbols loaded and their paths? The callback function could return >> void and accept an array of $symbols >> with the following guaranteed minimum structure? >> >> $symbols = array( >> 'classes' => [], >> 'interfaces' => [], >> 'traits' => [], >> 'enums' => [], >> ); >> > Except include() and friends aren't function calls, but > language constructs/expressions and don't take parameters as such, so I don't see how that > would be possible without changing include() and friends to function > calls (along the lines of what happened for exit in PHP 8.4 with > non-parenthesized use still possible to mitigate the otherwise huge breaking change), I know that those functions can be called as a function and return a value like the following: $return_value = include($path); I was making an assumption that since they be called like a function they could also accept optional parameters, although I admittedly was only assuming and do not know for sure. Do you know for a fact that they cannot take a 2nd parameter, or just assuming like I was? Does anyone else know for certain it is would be possible for include() et.al. to accept an optional 2nd parameter? However, even if a 2nd parameter is not a viable option then this could be addressed by instead adding a single new function with a signature of spl_autoload_callback($fn callback):callback where the callback has a signature of function ($symbols array) which could be used like so: function loadFile($path) { if (strpos(__DIR__, 'phar://') !== 0) { $path = realpath($path); if ($path === false) { return false; } } if (isset(self::$loadedClasses[$path]) === true) { return self::$loadedClasses[$path]; } $prior_callback = spl_autoload_callback(function($symbols) use ($path) { foreach ($symbols['classes'] as $className) { self::$loadedClasses[$path] = $className; self::$loadedFiles[$className] = $path; } }); include($path); spl_autoload_callback($prior_callback); return self::$loadedClasses[$path]; } >> This approach would be a less disruptive than my prior suggestion > Not so sure about that considering the above ;-) Well then I think a single new function would be very low on the disruption scale, no? > This probably needs some more bike shedding ;-) Shedding of bike undertaken. :-) -Mike

« previous php.internals (#125039) next »