Корневое пространство имен PHP - PullRequest
3 голосов
/ 22 марта 2012

У меня есть один файл, в котором мне нужно указать классы в нескольких пространствах имен, что-то вроде:

<?php

namespace library;

class ClassInLib {
   ...
}

namespace \; //Switch to root namespace

class ClassInRoot {
   ...
}

Приведенный выше код имеет синтаксическую ошибку на namespace \;. Как я могу переключиться с пространства имен library на корневое пространство имен?

Зачем мне это нужно: мне нужно смоделировать кучу классов во время модульного тестирования, и я не думаю, что эти очень короткие классы имитации оправдывают нахождение в отдельных файлах.

Ответы [ 2 ]

4 голосов
/ 22 марта 2012
namespace 
{ 
    class RootClass
    {

        function whatever();
    }
}
namespace Symfony\Component\DependencyInjection
{
    interface ContainerAwareInterface
    {

        function setContainer(ContainerInterface $container = null);
    }
}

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

Хороший шанс, что вы все равно решите использовать отдельные файлы.

0 голосов
/ 28 февраля 2019

Я некоторое время боролся с этим - я поместил файлы классов, которые я хотел бы использовать в глобальном пространстве имен (например, я хочу использовать их как \myClass), в их собственную папку, и я удалил все namespace ... ;, объявленные в файлах.

Затем в composer.json добавьте карту классов в каталог, который я сделал:

    "autoload": {
        "classmap": [
            "directoryWith/subDirIfNeeded"
        ]
        ...
    } 

Тогда не забывайте composer dumpautoload всякий раз, когда вы вносите изменения в composer.json

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...