Временное пространство имен - PullRequest
2 голосов
/ 02 апреля 2012

Есть ли способ временно использовать пространство имен?Я использую библиотеку для создания форм, и она использует пространства имен, проблема в том, что я обычно хочу создать форму в середине страницы, которая, таким образом, находится в глобальном пространстве имен.Затем, если я хочу вызвать какую-либо функцию из этой библиотеки, мне нужно все поставить с префиксом Namespace \

Нет ли в PHP способа сделать что-то подобное:это относится к Namespace \ test?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

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

<?php
namespace foo;
use My\Full\Classname as Another;

// this is the same as use My\Full\NSname as NSname
use My\Full\NSname;

// importing a global class
use ArrayObject;

$obj = new namespace\Another; // instantiates object of class foo\Another
$obj = new Another; // instantiates object of class My\Full\Classname
NSname\subns\func(); // calls function My\Full\NSname\subns\func
$a = new ArrayObject(array(1)); // instantiates object of class ArrayObject
// without the "use ArrayObject" we would instantiate an object of class foo\ArrayObject
?>

Это самое близкое, что вы можете получить - нет способа временно изменить пространство имен по умолчанию.

0 голосов
/ 09 марта 2019

Я знаю, что это старый вопрос, и хотя принятый ответ отвечает на вопрос в том виде, в котором он был задан, мне кажется, что ОП действительно спрашивает: «Могу ли я использовать элементы в глобальном пространстве имен из другого пространства имен. Ответ здесь»это ясное и простое да.

Представьте себе два класса (один в глобальном пространстве имен, другой в своем собственном:

ClassInGlobal.php

<?php
class ClassInGlobal
{
    public static function doStuff()
    {
        echo 'I do some stuff';
    }
}

ClassInNamespace.php

<?php
namespace App\Classes;

class ClassInNamespace
{
    public function callDoStuff()
    {
        \ClassInGlobal::doStuff();
    }
}

Все вышеперечисленное выполняется нормально. Все, что требуется, - это косая черта, указывающая полностью определенное глобальное пространство имен. Кроме того, вы можете добавить объявление use ClassInGlobal сразу после объявления пространства имен и опустить косую черту.

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

require './Namespace/Utilities.php';

Blabla global namespace
strlen('test'); // 4

\Namespace\Utilities::test();

More global PHP

Надеюсь, что это поможет кому-то прийти сюда в поискахчто.

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