Menu
Coddy logo textTech

__toString ve __debugInfo

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 45 / 91.

__toString() yöntemi, bir nesnenin dize olarak nasıl temsil edilmesi gerektiğini tanımlamanı sağlar. Bu yöntem, bir nesneyi echo veya dize birleştirme gibi bir dize bağlamında kullandığında otomatik olarak çağrılır.

<?php
class User {
    public function __construct(
        private string $name,
        private string $email
    ) {}
    
    public function __toString(): string {
        return $this->name . " (" . $this->email . ")";
    }
}

$user = new User("Alice", "alice@example.com");
echo $user;

Çıktı:

Alice (alice@example.com)

__debugInfo() yöntemi, bir nesne üzerinde var_dump() kullandığınızda hangi bilgilerin görüneceğini denetler. Bu, hassas verileri gizlemek veya hata ayıklama sırasında hesaplanan değerleri göstermek için kullanışlıdır:

<?php
class BankAccount {
    public function __construct(
        private string $accountNumber,
        private float $balance,
        private string $pin
    ) {}
    
    public function __debugInfo(): array {
        return [
            'accountNumber' => '****' . substr($this->accountNumber, -4),
            'balance' => $this->balance,
            'pin' => '[HIDDEN]'
        ];
    }
}

$account = new BankAccount("1234567890", 1500.00, "9876");
var_dump($account);

Çıktı:

object(BankAccount)#1 (3) {
  ["accountNumber"]=>
  string(8) "****7890"
  ["balance"]=>
  float(1500)
  ["pin"]=>
  string(8) "[HIDDEN]"
}

__debugInfo() yönteminin, varsayılan özellik dökümünün yerini alan anahtar-değer çiftlerinden oluşan bir dizi döndürdüğüne dikkat edin. Hassas PIN gizlenir ve hesap numarası kısmen maskelenir; güvenli hata ayıklama için mükemmeldir.

challenge icon

Görev

Kolay

Hem __toString() hem de __debugInfo() sihirli yöntemlerini gösteren bir kimlik bilgisi yönetim sistemi oluşturalım. Yazdırıldığında kullanıcı dostu bilgiler görüntüleyen, hata ayıklama sırasında hassas verileri koruyan bir sınıf oluşturacaksın.

Kodunu iki dosyaya ayıracaksın:

  • Credential.php: Oturum açma bilgilerini güvenli bir şekilde saklayan bir Credential sınıfı oluştur. $username (string), $password (string) ve $lastLogin (string) için private özellikleri tanımlamak üzere yapıcı destekli özellik tanımlamayı kullan. İki sihirli yöntem uygula:
    • __toString(): Kullanıcı dostu bir dize döndürür: "User: [username] (Last login: [lastLogin])". Parolanın dize gösteriminde hiçbir zaman açığa çıkarılmadığına dikkat et.
    • __debugInfo(): var_dump() için kullanıcı adını olduğu gibi gösteren, parolayı yalnızca "[PROTECTED]" göstererek maskeleyen ve son oturum açma tarihini normal şekilde görüntüleyen bir dizi döndürür.
  • main.php: Credential dosyasını dahil et. Üç girdi alacaksın: bir kullanıcı adı, bir parola ve son oturum açma tarihi. Bu değerlerle bir Credential örneği oluştur. Önce kimlik bilgisi nesnesini doğrudan echo ile yazdır (bu işlem __toString() yöntemini tetikler). Ardından yeni bir satırda, korumalı hata ayıklama çıktısını görmek için nesne üzerinde var_dump() kullan.

__toString() yöntemi, parolayı açığa çıkarmadan kimlik bilgisini görüntülemek için temiz ve güvenli bir yol sağlar. __debugInfo() yöntemi, hata ayıklama sırasında bile hassas bilgilerin gizli kalmasını sağlar: kimlik doğrulama verileriyle çalışırken bu kritik bir uygulamadır.

Kendin dene

<?php

require_once 'Credential.php';

// Girdileri oku
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$lastLogin = trim(fgets(STDIN));

// TODO: Girdi değerleriyle bir Credential örneği oluştur

// TODO: Credential nesnesini echo et (__toString()'i tetikler)

// TODO: Korumalı hata ayıklama çıktısını görmek için nesne üzerinde var_dump() kullan

?>
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online PHP derleyicisi