Получить пространство имен класса, используя черту

Допустим, у меня есть такой простой класс, который использует черту.

<?php namespace A\B;

use C\FooTrait;

class D {
use FooTrait;
}

И моя черта выглядит так.

<?php namespace C;

class FooTrait {

public function getBaseNamespace()
{
// code
}

}

Мое ожидаемое поведение будет следующим:

<?php
$d = new D;
// Shoud be 'A\B';
$d->getBaseNamespace();

Но до сих пор я не смог сделать это с помощью API отражения. Есть какие-нибудь подсказки?

1

Решение

Это может быть немного проще, чем с помощью отражения.
Если вы пытаетесь определить это из метода черты.

Ты можешь использовать:

public function getBaseNamespace()
{
return preg_replace('/(.+)\\\\[^\\\\]+/', '$1', __CLASS__);
}
1

Другие решения

Моя последняя реализация заключается в следующем.

<?php namespace Tools\Namespaces;

use ReflectionClass;

trait NamespaceTrait {

public function getBaseNamespace()
{
$reflection = new ReflectionClass(__CLASS__);
return $reflection->getNamespaceName().'\\';
}
}
0

По вопросам рекламы [email protected]