__toString & __debugInfo
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 45 dari 91.
method __toString() memungkinkan kamu menentukan bagaimana object ditampilkan sebagai string. method ini dipanggil secara otomatis saat kamu menggunakan object dalam konteks string, seperti dengan echo atau penggabungan string.
<?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;
Output:
Alice (alice@example.com)method __debugInfo() mengatur informasi yang ditampilkan saat kamu menggunakan var_dump() pada object. Ini berguna untuk menyembunyikan data sensitif atau menampilkan nilai yang dihitung saat debug:
<?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);
Output:
object(BankAccount)#1 (3) {
["accountNumber"]=>
string(8) "****7890"
["balance"]=>
float(1500)
["pin"]=>
string(8) "[HIDDEN]"
}Perhatikan bahwa __debugInfo() mengembalikan array pasangan kunci-nilai yang menggantikan dump property default. PIN sensitif disembunyikan, dan nomor rekening disamarkan sebagian, sempurna untuk debug yang aman.
Tantangan
MudahMari kita buat sistem pengelolaan kredensial yang menunjukkan penggunaan magic method __toString() dan __debugInfo(). Kamu akan membuat class yang menampilkan informasi yang mudah dipahami pengguna saat dicetak, sekaligus melindungi data sensitif saat proses debug.
Kamu akan mengatur kodemu dalam dua file:
Credential.php: Buat classCredentialyang menyimpan informasi login dengan aman. Gunakan constructor promotion untuk mendefinisikan property private untuk$username(string),$password(string), dan$lastLogin(string). Implementasikan dua magic method:__toString(): Mengembalikan string yang mudah dipahami pengguna:"User: [username] (Last login: [lastLogin])". Perhatikan bahwa password tidak pernah ditampilkan dalam representasi string.__debugInfo(): Mengembalikan array untukvar_dump()yang menampilkan username apa adanya, menyamarkan password dengan hanya menampilkan"[PROTECTED]", dan menampilkan tanggal login terakhir seperti biasa.
main.php: Sertakan file Credential. Kamu akan menerima tiga input: username, password, dan tanggal login terakhir. Buat instanceCredentialdengan nilai-nilai ini. Pertama, echo object credential secara langsung. Ini akan memicu__toString(). Lalu, pada baris baru, gunakanvar_dump()pada object tersebut untuk melihat output debug yang terlindungi.
Method __toString() menyediakan cara yang rapi dan aman untuk menampilkan credential tanpa mengungkap password. Method __debugInfo() memastikan informasi sensitif tetap tersembunyi, bahkan selama proses debug. Ini adalah praktik penting saat bekerja dengan data autentikasi.
Coba sendiri
<?php
require_once 'Credential.php';
// Baca input
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$lastLogin = trim(fgets(STDIN));
// TODO: Buat instance Credential dengan nilai input
// TODO: Tampilkan object credential dengan echo (memicu __toString())
// TODO: Gunakan var_dump() pada object untuk melihat output debug yang dilindungi
?>Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online