Question

I know you can use Composer's files scheme to include functions or definitions automatically in every file.

I'd like to take this one step further and never have to manually write a use classname as statement again in individual files. This is my ideal set up:

/composer.json:

{
    "require": {
        "slim/slim": "2.*"
    }
    "autoload": {
        "files": ["init.php"]
    }
}

/init.php:

use Slim\Slim as Slim;
use Slim\Route as Route;
define("RYAN","BRODIE");

/example.php:

require '/vendor/autoload.php';
echo RYAN; //  ✔ outputs "BRODIE"
new Slim(); //  × Fatal error: Class 'Slim' not found

This way whenever I add a new namespace or class to an existing namespace, I can add it to init.php and then use it as I so wish across all of the repository.

Was it helpful?

Solution

Unless you modify the PHP runtime, this is not possible. namespace and use declarations are only valid in the physical file they appear in. These declarations do not span across includes. If they did you'd have a real nightmare managing namespaces and aliases.

Declaring these at the top of each file is simply something you'll have to live with. Most languages that have features similar to PHP's namespaces do the same.

Link to documentation.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top