Menu
CoddyTech

__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.

challenge icon

Tantangan

Mudah

Mari 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 class Credential yang 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 untuk var_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 instance Credential dengan nilai-nilai ini. Pertama, echo object credential secara langsung. Ini akan memicu __toString(). Lalu, pada baris baru, gunakan var_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

?>
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online