ReflectionProperty Sınıfı

(PHP 5, PHP 7, PHP 8)

Giriş

ReflectionProperty sınıfı sınıfın özellikleri hakkında bilgi edinilmesini sağlar.

Sınıf Sözdizimi

class ReflectionProperty implements Reflector {
/* Sabitler */
public const int IS_STATIC;
public const int IS_READONLY;
public const int IS_PUBLIC;
public const int IS_PROTECTED;
public const int IS_PRIVATE;
/* Özellikler */
public string $name;
public string $class;
/* Yöntemler */
public __construct(object|string $class, string $property)
private __clone(): void
public static export(mixed $sınıf, string $isim, bool $ihracet = ?): string
public getAttributes(?string $name = null, int $flags = 0): array
public getHook(PropertyHookType $type): ?ReflectionMethod
public getHooks(): array
public getModifiers(): int
public getName(): string
public getRawValue(object $object): mixed
public getValue(?object $nesne = null): mixed
public hasHook(PropertyHookType $type): bool
public hasHooks(): bool
public hasType(): bool
public isAbstract(): bool
public isDefault(): bool
public isDynamic(): bool
public isFinal(): bool
public isInitialized(?object $object = null): bool
public isLazy(object $object): bool
public isPrivate(): bool
public isPrivateSet(): bool
public isPromoted(): bool
public isProtected(): bool
public isPublic(): bool
public isReadOnly(): bool
public isStatic(): bool
public isVirtual(): bool
public setAccessible(bool $erişilebilir): void
public setRawValue(object $object, mixed $value): void
public setValue(object $nesne, mixed $değer): void
public setValue(mixed $değer): void
public __toString(): string
}

Özellikler

name

Özelliğin ismi. Salt-okunur olup, bir yazma çabası ReflectionException istisnasına yol açar.

class

Özelliği tanımlayan sınıfın ismi. Salt-okunur olup, bir yazma çabası ReflectionException istisnasına yol açar.

Öntanımlı Sabitler

ReflectionProperty Değiştiricileri

ReflectionProperty::IS_STATIC

Özelliğin static olduğunu belirtir. PHP 7.4.0 öncesinde, bu değer 1 idi.

ReflectionProperty::IS_READONLY

Özelliğin salt okunur olduğunu belirtir. PHP 8.1.0 ve sonrasında kullanılabilir.

ReflectionProperty::IS_PUBLIC

Özelliğin public olduğunu belirtir. PHP 7.4.0 öncesinde, bu değer 256 idi.

ReflectionProperty::IS_PROTECTED

Özelliğin protected olduğunu belirtir. PHP 7.4.0 öncesinde, bu değer 512 idi.

ReflectionProperty::IS_PRIVATE

Özelliğin private olduğunu belirtir. PHP 7.4.0 öncesinde, bu değer 1024 idi.

Bilginize:

Sabitlerin değerleri PHP sürümleri arasında farklılık gösterebilir. Bu bakımdan sabitler değerleriyle değil isimleriyle kullanılmalıdır.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0 ReflectionProperty::export() kaldırıldı.

İçindekiler

add a note

User Contributed Notes 2 notes

up
7
rasmus at mindplay dot dk
14 years ago
I think a more accurate explanation is this:

The Reflection classes are designed to reflect upon the source code of an application, not on any runtime information.

I think you misunderstand the ReflectionProperty constructor in your example above. The fact that it accepts an object as argument is just a convenience feature - you are actually inspecting the class of that object, not the object itself, so it's basically equivalent to:

<?php

// works fine
$Reflection = new ReflectionProperty(get_class($a), 'a');

// throws exception
$Reflection = new ReflectionProperty(get_class($a), 'foo');

?>

Getting the class of the object you're passing in is implied, since inspecting a defined property is the purpose of this class.

In your example, $a->foo is a dynamic member - it is not defined as a member of class, so there is no defining class reference, line number, default value, etc. - which means, there is nothing to reflect upon.

Clearly this very useful library could use some real documentation...
up
0
mitgath at gmail dot com
13 days ago
There is way to get property type without reflection.
Not very clear, but there is:

<?php

function getPropType(object $object, string $propName): string
{
try {
$object->{$propName} = new class {};
} catch (
\TypeError $e) {
// @hint: question mark in type can be used to detect if property is nullable
if (preg_match('/of type \??(.*)$/', $e->getMessage(), $m)) {
return
$m[1];
}
throw
$e;
} catch (
\Error $e) {
// property doesn't exist or is not public
throw $e;
}
throw new
\TypeError(sprintf('Property %s of class %s has no type', $propName, $object::class));
// alternatively return 'mixed';
}
?>

note: in case you need access to private/protected properties its easy to change this to be embedded in any class:

<?php

trait PropertyTypeResolver
{
public function
getPropType(string $propName): string
{
try {
$this->{$propName} = new class {};
} catch (
\TypeError $e) {
// @hint: question mark in type can be used to detect if property is nullable
if (preg_match('/of type \??(.*)$/', $e->getMessage(), $m)) {
return
$m[1];
}
throw
$e;
} catch (
\Error $e) {
// property doesn't exist
throw $e;
}
throw new
\TypeError(sprintf('Property %s of class %s has no type', $propName, $this::class));
// alternatively return 'mixed';
}
}
?>
To Top