> Le 26 oct. 2023 à 21:23, Larry Garfield <la...@garfieldtech.com> a écrit :
> 
> App-wide aliases run into the autoloading problem.  If the engine runs across 
> the add() function above, and "numeric" isn't defined, what can it do?  
> Currently, all it can do is trigger autoloading, which only works for 
> class-ish constructs (class, interface, trait, enum).  Making type aliases a 
> full class-like construct seems... weird, and over-engineered.  But if not, 
> how do we autoload them?  And if they do autoload somehow, does that mean we 
> end up with a bunch of files with a single `type` line in them?  That seems 
> not-good.  You also then have to ask how they interact with namespaces.
> 
> So far no one seems to like my idea of "composer has a files block, PHP has a 
> preloader, they're small, so who the hell cares about autoloading, just 
> greedily load them and move on with life", even though I think that's the 
> best answer. :-)

Hi,

“Autoloading” does not mean (and has never meant) “one file per class-like 
construct”; even if it is the most customary strategy (and the one consecrated 
by PSR), it is by no means the only one.

Proof of concept: With the following autoloader, at the first time the compiler 
needs the definition of some class-like symbol under the FooBits\Acme\Type 
namespace, all symbols under that namespace are loaded together:

```php
spl_autoload_register(function ($class) {
    if (str_starts_with($class, 'FooBits\\Acme\\Type\\')) {
        // we have conventionally put all types defined by our library under 
this namespace,
        // and there are all defined together in the following file:
        require 'vendor/foobits/acme/src/types.php';
    }
    elseif (str_starts_with($class, 'FooBits\\Acme\\')) {
        // for other symbols we use the boring psr-4 convention
        require 'vendor/foobits/acme/src/' . str_replace('\\', '/', 
substr($class, 13)) . '.php';
    }
});
```

I think that treating the type aliases as class-like *names* for the purpose of 
naming and autoloading (without giving my opinion whether they are class-like 
*constructs* for some definition of “are”) is a reasonable approach, and 
autoloading/preloading/whatever-loading-strategy ought to be treated as an 
orthogonal (non-)issue.

—Claude

Reply via email to