0

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.

Ryan Brodie
  • 6,554
  • 8
  • 40
  • 57

1 Answers1

2

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.

Ryan Brodie
  • 6,554
  • 8
  • 40
  • 57
deceze
  • 510,633
  • 85
  • 743
  • 889
  • I agree with not being able to set `namespace`'s across files, obvious logic to that, but `use as statements`? The error could be just the same as if you set the same alias twice within 1 file. Will mark correct when you link to documentation (which I couldn't find before posting QS :D), not that I don't believe you. – Ryan Brodie Jul 16 '13 at 13:48
  • 1
    It's really not uncommon to have classes of the same name in separate namespaces. In fact, that's exactly what namespaces were designed for. If you alias them and aliases span across files, you're back at square one with regards to avoiding naming conflicts, only this time called "alias conflicts". – deceze Jul 16 '13 at 13:51
  • I understand the point of namespaces or I clearly wouldn't of implemented them. I'm not saying the above wouldn't work for *everyone*, but it'd work for some. – Ryan Brodie Jul 16 '13 at 13:57
  • 1
    And *I* am saying it would largely negate the point of namespaces, therefore it doesn't work. :) Here's your documentation BTW: http://php.net/manual/en/language.namespaces.importing.php – deceze Jul 16 '13 at 14:01
  • 1
    Apologies for my jackassery – Ryan Brodie Jul 19 '16 at 13:25