gpt4 book ai didi

php - 如何通过反射在 php 5.6 中获取属性类命名空间

转载 作者:行者123 更新时间:2023-12-04 16:51:22 24 4
gpt4 key购买 nike

我想通过 ReflectionClass 获取类属性的命名空间。

namespace Foo\Bar;
use Foo\Quux\B;

class A{

/**
* @var B $b
*/
protected $b = null;

...

}

在另一个类中,我正在创建一个 ReflectionClass对象并试图获取属性 b 的命名空间所以我可以创建 ReflectionClass因为它的类。
$namespace = "Foo\\Bar";
$classname = "A";
$rc = new \ReflectionClass("$namespace\\$classname");
$type = getVarType($rc->getProperty("b")->getDocComment()); // returns B
$ns = $rc->getProperty("b")-> ... // I want to find out the namespace of class B
$rc1 = new \ReflectionClass("$ns\\$type");

是否有可能找出 A 类使用哪些命名空间?
然后我可以配对 class A 的命名空间与发现的属性类型一起使用。

我知道我可以用这样的类型提示来解决这个问题: @var Foo\Quux\B $b ,但我有很多类,比如 class A具有许多使用类型的属性和方法,例如 b我不想重构整个代码。

是否可以从 use 中找到命名空间?语句还是我必须使用显式类型提示?

谢谢!

最佳答案

您应该可以使用 getNamespaceName找出答案,但是 getProperty也可以告诉你

namespace Foo;

class A {
protected $something;
}

namespace Bar;

class B {
protected $a;

public function __construct(){
$this->a = new \Foo\A();
}
}

$reflection = new \ReflectionClass('Bar\\B');
$a = $reflection->getProperty("a");
var_dump($a);

你会得到

object(ReflectionProperty)#2 (2) {
["name"]=> string(1) "a"
["class"]=> string(5) "Bar\B"
}

关于php - 如何通过反射在 php 5.6 中获取属性类命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43258062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com