__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.
Görev
KolayHem __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 birCredentialsı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 birCredentialö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 üzerindevar_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
?>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 KelimesiMetotlarÖzelliklerYapıcı Metot (__construct)Yıkıcı Metot (__destruct)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar KelimesiMetot Geçersiz Kılmafinal Anahtar KelimesiSoyut SınıflarÖzet - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicilere Derinlemesine BakışGetter ve Setter MetotlarıBilgi GizlemeConstructor Promotion (8.0)Özet - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımDependency InjectionAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlama: Derinlemesine İncelemeGenerator'lar ve Iterator'lar13Tasarı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ıKompozit KalıbıRepository Kalıbı2İsim Alanları ve Autoloading
İsim Alanlarına Girişuse Anahtar KelimesiPSR-4 Autoloading StandartıComposer AutoloaderÖzet - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Fazla Arayüz UygulamaArayüz vs Soyut SınıfArayüzler ile Tip BelirlemeÖzet - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Nesne Klonlama__serialize & __unserializeÖzet - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerReadonly Özellikler (PHP 8.1)Özet - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmaya Yeniden BakışArayüzler ile Çok BiçimlilikType Hinting ve Union TypesLate Static BindingÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişÇoklu Trait KullanımıTrait Çakışma ÇözümüTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım12Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı15Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi