ReflectionProperty
ReflectionProperty ile property türünü öğrenip private değer okumayı öğrenirsin.
ReflectionProperty ile property inceleme
ReflectionProperty bir property'yi inceler. new ReflectionProperty("UserService", "apiKey") ile $apiKey property'sini alırsın.
getType() türünü, isStatic() statik mi olduğunu, isPrivate() private mı olduğunu söyler. getName() property'nin adını dize olarak verir.
Private bir property'nin değerini okumak için setAccessible(true) çağrısı yapman gerekir; sonra getValue($object) değeri verir. Bu yetenek test ve sıralama araçlarında çok işe yarar.
getValue ve setValue kullanımı
getValue($object) statik olmayan property için nesne ister ve mevcut değeri döndürür. setValue($object, $value) ile yeni değer yazılır.
Statik property'lerde nesne yerine null geçer: $rp->getValue(null).
PHP 8.1'den beri setAccessible(true) varsayılan davranıştır; ama yine de yazmak kodun niyetini belli eder ve eski sürümlerde gereklidir.
Uygulama Private $apiKey değerini oku
Aşağıdaki UserService sınıfında private $apiKey property'si verilmiş. Bir ReflectionProperty nesnesi oluştur, setAccessible(true) ile erişimi aç ve getValue() ile değeri yazdır.
Örnek çözümü göster
$rp = new ReflectionProperty("UserService", "apiKey"); oluştur. $rp->setAccessible(true); çağır. echo $rp->getValue(new UserService()) . "\n"; ile yazdır.
Örnek çözüm:
<?php
class UserService {
private string $apiKey = "sk_test_12345";
}
$rp = new ReflectionProperty("UserService", "apiKey");
$rp->setAccessible(true);
echo $rp->getValue(new UserService()) . "\n";
Kendini test et
-
Private bir property'nin değerini okumak için ne gerekir?
- Yalnızca ReflectionProperty oluşturmak
- Doğrudan getValue() çağırmak yeterli
- setAccessible(false) çağırmak
- Önce setAccessible(true) çağırmak
Cevabı göster
Önce setAccessible(true) çağırmak — Doğru. setAccessible(true) private erişimi açar; sonra getValue() çalışır.
-
setAccessible çağrısını tamamla
<?php $rp = new ReflectionProperty("UserService", "apiKey"); $rp->____(true); echo $rp->getValue(new UserService()) . "\n";Cevabı göster
<?php $rp = new ReflectionProperty("UserService", "apiKey"); $rp->setAccessible(true); echo $rp->getValue(new UserService()) . "\n"; -
ReflectionProperty methodlarını eşleştir
- getValue
- Property değerini okur
- setValue
- Property değerini yazar
- setAccessible
- Private erişimi açar
- getType
- Property türünü döndürür