我正在創建一個使用 ReflectionProperty 的類,但得到了奇怪的結果。本質上,調用是返回一些完全不相關的數組$reflectionProperty->getType()->getName()的值。它在看似隨機的條件下執行此操作。見下文:// this will be used as a type hinted property.class DummyClass { public function __construct($arr) {}}// a class that sets its property values reflectivelyclass BaseClass { /** @var ReflectionProperty[] */ private static $publicProps = []; /** * Gets public ReflectionProperties of the concrete class, and caches them * so we do not need to perform reflection again for this concrete class. * * @return ReflectionProperty[] * @throws ReflectionException */ private function getPublicProps(){ if (!static::$publicProps) { $concreteClass = get_class($this); static::$publicProps = (new ReflectionClass($concreteClass)) ->getProperties(ReflectionProperty::IS_PUBLIC); } return static::$publicProps; }請注意, 的值$propClass是abc123def456——這是怎么發生的?更多怪異將“abc123def456”的值更改為“12345678”即可。將“abc123def456”的值改為“123456789”,不起作用。省略 var_export(),它就會起作用。(不過,在其他情況下它仍然可能會損壞)。我的直覺告訴我這是一個 PHP 錯誤,但我可能做錯了什么,和/或這可能記錄在某處。我想要一些澄清,因為目前我唯一可靠的解決方案是不緩存反射的 $publicProps。ReflectionClass->getProperties()這會導致每次創建新的時都會進行不必要的調用ConcreteClass,我想避免這種情況。
PHP Reflection——這是一個錯誤還是預期的行為?
慕田峪7331174
2023-09-22 17:03:32