Я довольно новичок в пространствах имен (и да, я прочитал раздел пространств имен документации 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?
...
Как последующей вопрос, Мне также интересно, что произойдет с областью видимости, если я должен включить файл с пространствами имен внутри другого файла с пространствами имен, в отличие от вышеприведенного примера, где 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?
Просто, чтобы уточнить, поэтому область пространств имен ограничена файлом? В случае глобального примера (первый пример), в main.php, если я делаю $ class = new Abc(); то я имею в виду глобальный класс. И если я хочу обратиться к классу Abc пространства имен A, я должен сделать $ class = new \ A \ Abc(); Да? –
правильный. если вы не определяете пространство имен в верхней части файла, имена классов просматриваются в глобальной области. В противном случае 'Abc()' будет искать только в пространстве имен файлов (если вы не добавили обратную косую черту для утверждения глобального пространства имен). –
Я вижу. Мне кажется странным, что область видимости имен не выходит за пределы файла, который они определены, когда этот файл включен в другой файл. Я имею в виду, что весь другой код становится частью файла, который он включен в строку, в которую входит оператор include. –