__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.
Görev
KolayHem __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 birCredentialsı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 birCredentialö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 üzerindevar_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
?>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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesneler$this Anahtar SözcüğüMetotlarÖzelliklerYapıcı (__construct)Yıkıcı (__destruct)Tekrar - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar SözcüğüMetot Geçersiz Kılmafinal Anahtar SözcüğüSoyut SınıflarTekrar - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicileri DerinlemesineGetter ve Setter'larBilgi GizlemeYapıcı Özellik Terfisi (8.0)Tekrar - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Composition ve KalıtımBağımlılık EnjeksiyonuAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlamaya Derinlemesine BakışÜreteçler ve Yineleyiciler13Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik KalıpDepo Kalıbı2Namespace’ler ve Autoloading
Namespace’lere Girişuse Anahtar SözcüğüPSR-4 Autoloading StandardıComposer AutoloaderTekrar - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Çok Arayüz UygulamaArayüz ve Soyut Sınıf KarşılaştırmasıArayüzlerle Tür İpuçlarıTekrar - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString ve __debugInfo__get, __set, __isset, __unset__call ve __callStatic__clone ve Nesne Klonlama__serialize ve __unserializeTekrar - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerSalt Okunur Özellikler (PHP 8.1)Tekrar - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmayı Yeniden Ele AlmaArayüzler Yoluyla Çok BiçimlilikTür İpuçları ve Birleşim TürleriGeç Bağlanan Statik ÇağrılarÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişBirden Çok Trait KullanımıTrait Çakışmalarını ÇözümlemeTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım Karşılaştırması12Tasarım Desenleri 1. Bölüm
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online PHP derleyicisi