我正在創(chuàng)建一個(gè)使用 ReflectionProperty 的類,但得到了奇怪的結(jié)果。本質(zhì)上,調(diào)用是返回一些完全不相關(guān)的數(shù)組$reflectionProperty->getType()->getName()的值。它在看似隨機(jī)的條件下執(zhí)行此操作。見下文:// 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; }請(qǐng)注意, 的值$propClass是abc123def456——這是怎么發(fā)生的?更多怪異將“abc123def456”的值更改為“12345678”即可。將“abc123def456”的值改為“123456789”,不起作用。省略 var_export(),它就會(huì)起作用。(不過(guò),在其他情況下它仍然可能會(huì)損壞)。我的直覺告訴我這是一個(gè) PHP 錯(cuò)誤,但我可能做錯(cuò)了什么,和/或這可能記錄在某處。我想要一些澄清,因?yàn)槟壳拔椅ㄒ豢煽康慕鉀Q方案是不緩存反射的 $publicProps。ReflectionClass->getProperties()這會(huì)導(dǎo)致每次創(chuàng)建新的時(shí)都會(huì)進(jìn)行不必要的調(diào)用ConcreteClass,我想避免這種情況。
PHP Reflection——這是一個(gè)錯(cuò)誤還是預(yù)期的行為?
慕田峪7331174
2023-09-22 17:03:32