CodeBlanks Logo Icon CodeBlanks

ReflectionProperty

PHP kursu · Uzman · Ders 18/54

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

  1. 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.

  2. 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";
    
  3. 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

Uzman bölümündeki tüm dersler