Menu
Coddy logo textTech

__toString & __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 (string) olarak nasıl temsil edilmesi gerektiğini tanımlamanıza olanak tanır. Bu yöntem, bir nesneyi echo veya dize birleştirme gibi bir dize bağlamında kullandığınızda 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 kontrol eder. Bu, hata ayıklama sırasında hassas verileri gizlemek veya hesaplanmış değerleri göstermek için yararlı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 gizlenmiştir ve hesap numarası kısmen maskelenmiştir - güvenli hata ayıklama için mükemmeldir.

challenge icon

Görev

Kolay

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

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • Credential.php — Oturum açma bilgilerini güvenli bir şekilde saklayan bir Credential sınıfı oluşturun. $username (string), $password (string) ve $lastLogin (string) için private özellikleri tanımlamak üzere constructor promotion kullanın. İki sihirli metot uygulayın:
    • __toString() — Kullanıcı dostu bir dize döndürür: "User: [username] (Last login: [lastLogin])". Parolanın dize gösteriminde asla ifşa edilmediğine dikkat edin.
    • __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 edin. Üç girdi alacaksınız: bir kullanıcı adı, bir parola ve bir son oturum açma tarihi. Bu değerlerle bir Credential örneği oluşturun. Önce, credential nesnesini doğrudan echo ile yazdırın (bu __toString() metodunu tetikler). Ardından yeni bir satırda, korumalı hata ayıklama çıktısını görmek için nesne üzerinde var_dump() kullanın.

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

Kopya kağıdı

__toString() yöntemi, bir nesnenin echo veya dize birleştirme ile kullanıldığında dize olarak nasıl temsil edileceğini tanımlar:

<?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; // Alice (alice@example.com)

__debugInfo() yöntemi, bir nesne üzerinde var_dump() kullanıldığında hangi bilgilerin görüneceğini kontrol eder. Görüntülenecek anahtar-değer çiftlerinden oluşan bir dizi döndürü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);
// Maskelenmiş hesap numarasını ve gizli PIN'i gösterir

Bu yöntemler, hassas verileri gizlemek veya farklı bağlamlar için nesne çıktısını özelleştirmek için kullanışlıdır.

Kendin dene

<?php

require_once 'Credential.php';

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

// TODO: Giriş değerleriyle bir Credential örneği oluşturun

// TODO: Credential nesnesini ekrana yazdırın (__toString() metodunu tetikler)

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

?>
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