getProperty
генерирует исключение, а не ошибку. Значимость заключается в том, что вы можете справиться с этим и сохранить себя if
:
$ref = new ReflectionObject($obj);
$propName = "myProperty";
try {
$prop = $ref->getProperty($propName);
} catch (ReflectionException $ex) {
echo "property $propName does not exist";
//or echo the exception message: echo $ex->getMessage();
}
Чтобы получить все частные свойства, используйте $ref->getProperties(IS_PRIVATE);
Маленькая находка, которую я нахожу супер полезной, - это использование наборов внешних ключей с декоратором свойств. Это может хорошо сработать для вас. Например.
class City(models.Model):
name = models.CharField(max_length=200)
# We add a property for the regions
@property
def regions(self):
# now we use the region set
return self.region_set.all()
class Region(models.Model):
name = models.CharField(max_length=200)
city = models.ForeignKey(City)
Теперь вы можете получить доступ к городу региона через его внешний ключ, а вы можете получить доступ к регионам города через свойство регионов (city.regions)
.