Включают ли объявления пространств имен во включаемых файлах автоматически пространство имен родительского файла (PHP)?

#php #namespaces

#php #пространства имен

Вопрос:

Должен быть простой вопрос. У меня еще не установлена версия 5.3, поэтому я не могу экспериментировать самостоятельно.

При объявлении пространства имен во включаемом файле должен ли я указывать полный путь к пространству имен, или предполагается, что родительское пространство имен уже включено?

Например, если у меня есть файл:

 // file1.php
<?php
    namespace parent_space;
    include 'file2.php';
?>
  

и второй файл:

 // file2.php
<?php
    namespace child_space;
    // some code
?>
  

Поскольку file2.php оно включено из parent_space пространства имен в file1.php , является ли это пространство имен для «некоторого кода» parent_spacechild_space , или это просто child_space ?

Комментарии:

1. Вот что говорится в документации: php.net/manual/en /…

Ответ №1:

Нет. PHP не придает никакого значения местоположению вашего файла при включении, но он обрабатывает каждый файл как совершенно отдельную сущность в том, что касается пространств имен при разборе кода.

Таким образом, этот код не будет работать:

 <?php
    namespace Food; //this is a top level namespace
    include 'file2.php';

//file2.php
<?php
    namespace Tacos; //this is still a top level namespace
  

Вам нужно будет определить свой file2.php таким образом:

 <?php

namespace FoodTacos;
  

Обратитесь к руководству по PHP для получения дополнительной информации о пространствах имен: http://www.php.net/manual/en/language.namespaces.basics.php

Ответ №2:

В разделе «Пространство имен руководства по PHP» есть несколько похожих примеров:

http://www.php.net/manual/en/language.namespaces.basics.php

Короткий ответ: нет.

Комментарии:

1. Я предполагаю, что под «нет» вы подразумеваете, что используется вторая возможность пространства имен, которую я предложил?

2. ДА. «Нет» — это ответ на вопрос в вашем названии.