Я довольно новичок в пространствах имен (и да, я прочитал раздел пространств имен документации PHP). Мне интересно, какова область пространств имен в отношении нескольких файлов. Является ли пространство имен допустимым для одного файла, когда я включаю или требую этот файл в файле с глобальным кодом? И, кроме того, как это влияет на глобальный код? Я был бы вынужден изменить что-либо синтаксически с глобальным кодом.
Например, допустим, у меня есть файл A.php. То, что я хочу иметь, это следующее:
namespace A; class Abc { ... }
И тогда, допустим, у меня есть файл с глобальным кодом, назовите его main.php:
include("A.php"); class Abc { ... } $abc = new Abc(); // Should be global Abc, right? $abcFromNameSpace = new A\Abc(); // Should be namespace Abc, right? ...
вinclude("A.php"); class Abc { ... } $abc = new Abc(); // Should be global Abc, right? $abcFromNameSpace = new A\Abc(); // Should be namespace Abc, right? ...
В качестве последующего вопроса я также задаюсь вопросом, что произойдет с областью видимости, если я должен включить файл с пространствами имен внутри другого файла с пространствами имен, в отличие от приведенного выше примера, где main.php имеет только глобальный код. Будет ли это работать так:
namespace A; class Abc { ... }
И тогда, допустим, у меня есть файл с глобальным кодом, назовите его B.php:
namespace B; include("A.php"); class Abc { ... } $abc = new B\Abc(); // Should be namepsace B Abc, right? $abcFromNameSpace = new A\Abc(); // Should be namespace A Abc, right?
вnamespace B; include("A.php"); class Abc { ... } $abc = new B\Abc(); // Should be namepsace B Abc, right? $abcFromNameSpace = new A\Abc(); // Should be namespace A Abc, right?
Каждый раз, когда вы ссылаетесь на класс, который находится за пределами текущего объема файла или класса, вы используете его пространство имен:
<?php namespace B; $class = new \A\Abc();
Но если вы «используете» пространство имен в своем скрипте, вы можете оставить его:
<?php namespace B; use A\Abc; $class = new Abc();