Допустим, у меня есть такой простой класс, который использует черту.
<?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 отражения. Есть какие-нибудь подсказки?
Это может быть немного проще, чем с помощью отражения.
Если вы пытаетесь определить это из метода черты.
Ты можешь использовать:
public function getBaseNamespace()
{
return preg_replace('/(.+)\\\\[^\\\\]+/', '$1', __CLASS__);
}
Моя последняя реализация заключается в следующем.
<?php namespace Tools\Namespaces;
use ReflectionClass;
trait NamespaceTrait {
public function getBaseNamespace()
{
$reflection = new ReflectionClass(__CLASS__);
return $reflection->getNamespaceName().'\\';
}
}