Objek dan struktur data


Objek dan Struktur Data

1 Gunakan getter dan setter Gunakan enkapsulasi objek

2 Gunakan pembolehubah persendirian atau ahli yang dilindungi untuk objek

1. Gunakan getter dan setter

Dalam PHP anda boleh menggunakan public, protected, private pada kaedah untuk mengawal perubahan pada sifat objek.

  1. Apabila anda ingin melakukan operasi selain daripada mendapatkan sifat objek, anda tidak perlu mencari dan mengubah suai setiap kaedah akses harta dalam kod.

  2. Apabila terdapat set kaedah atribut yang sepadan, adalah mudah untuk menambah pengesahan parameter

  3. Perwakilan di dalam pakej

  4. Mudah untuk menambah pengelogan dan kawalan ralat apabila menggunakan setget dan get

  5. Apabila mewarisi kelas semasa, anda boleh mengatasi fungsi kaedah lalai

  6. get*set*Mudah digunakan pemuatan malas apabila sifat objek diambil dari pelayan jauh

Selain itu, pendekatan ini juga mematuhi prinsip pembukaan dan penutup dalam pembangunan OOP.

Teruk:

 class BankAccount
{
    public $balance = 1000;
}
 
$bankAccount = new BankAccount();
 
// Buy shoes...
$bankAccount->balance -= 100;

Baik:

 class BankAccount
{
    private $balance;
 
    public function __construct(int $balance = 1000)
    {
      $this->balance = $balance;
    }
 
    public function withdraw(int $amount): void
    {
        if ($amount > $this->balance) {
            throw new \Exception('Amount greater than available balance.');
        }
 
        $this->balance -= $amount;
    }
 
    public function deposit(int $amount): void
    {
        $this->balance += $amount;
    }
 
    public function getBalance(): int
    {
        return $this->balance;
    }
}
 
$bankAccount = new BankAccount();
 
// Buy shoes...
$bankAccount->withdraw($shoesPrice);
 
// Get balance
$balance = $bankAccount->getBalance();

2. Gunakan pembolehubah persendirian atau ahli yang dilindungi untuk objek

  • Mengubah suai kaedah dan sifat awam adalah sangat berbahaya kerana kod luaran boleh bergantung padanya dengan mudah dan anda tidak mempunyai kawalan ke atasnya. Pengubahsuaian ini memberi kesan kepada semua pengguna kelas ini. kaedah dan sifat awam adalah paling berbahaya untuk perubahan, kerana beberapa kod luar mungkin bergantung padanya dengan mudah dan anda tidak boleh mengawal kod yang bergantung padanya. Pengubahsuaian dalam kelas berbahaya untuk semua pengguna kelas.

  • Pengubahsuaian kepada yang dilindungi hampir sama berbahayanya dengan pengubahsuaian kepada awam, kerana ia tersedia untuk subkelas Satu-satunya perbezaan di antara mereka ialah lokasi yang boleh dipanggil adalah berbeza, dan pengubahsuaian kepada mereka mempengaruhi semua tempat yang menyepadukan kelas ini. pengubah suai dilindungi adalah berbahaya seperti awam, kerana ia tersedia dalam skop mana-mana kelas kanak-kanak Ini bermakna perbezaan antara awam dan dilindungi hanya dalam mekanisme akses, tetapi jaminan pengkapsulan tetap sama .

  • Pengubahsuaian kepada jaminan persendirian bahawa bahagian kod ini hanya akan menjejaskan kelas pengubahsuai persendirian semasa menjamin bahawa kod berbahaya untuk diubah suai hanya dalam sempadan kelas tunggal (anda selamat untuk pengubahsuaian dan anda tidak akan mempunyai kesan Jenga).

Jadi, gunakan public/protected,其他时候都用private hanya apabila anda perlu mengawal sama ada kod dalam kelas boleh diakses.

Anda boleh membaca catatan blog ini oleh Fabien Potencier.

Teruk:

 class Employee
{
    public $name;
 
    public function __construct(string $name)
    {
        $this->name = $name;
    }
}
 
$employee = new Employee('John Doe');
echo 'Employee name: '.$employee->name; // Employee name: John Doe

Baik:

 class Employee
{
    private $name;
 
    public function __construct(string $name)
    {
        $this->name = $name;
    }
 
    public function getName(): string
    {
        return $this->name;
    }
}
 
$employee = new Employee('John Doe');
echo 'Employee name: '.$employee->getName(); // Employee name: John Doe