Memahami Pengubahsuai Akses dalam PHP OOP: Awam, Dilindungi dan Peribadi

PHPz
Lepaskan: 2024-09-11 06:33:54
asal
1018 orang telah melayarinya

Understanding Access Modifiers in PHP OOP: Public, Protected, and Private

Dalam Pengaturcaraan Berorientasikan Objek PHP (OOP), pengubah suai akses mengawal keterlihatan sifat dan kaedah kelas. Pengubah suai akses utama dalam PHP adalah awam, dilindungi dan peribadi.

Artikel ini akan membimbing anda melalui tujuan dan penggunaan pengubah suai akses ini dan menerangkan cara menggunakannya dengan berkesan dalam PHP OOP.

1. Pengubahsuai Akses Awam

  • Kata kunci: awam
  • Keterlihatan: Boleh diakses dari mana-mana sahaja—di dalam kelas, di luar kelas dan dalam kelas terbitan.
  • Kes Penggunaan: Gunakan awam untuk sifat atau kaedah yang sepatutnya boleh diakses dari sebarang konteks.

Contoh:

class User {
    public $name = "John";

    public function greet() {
        return "Hello, " . $this->name;
    }
}

$user = new User();
echo $user->greet();  // Output: Hello, John
Salin selepas log masuk

Dalam contoh ini, kedua-dua sifat $name dan kaedah greet() adalah awam, membolehkan mereka diakses terus dari luar kelas.

2. Pengubahsuai Akses Terlindung

  • Kata kunci: dilindungi
  • Keterlihatan: Boleh diakses dalam kelas itu sendiri dan oleh subkelas (kelas kanak-kanak), tetapi bukan dari luar kelas.
  • Kes Penggunaan: Gunakan dilindungi untuk membenarkan kelas terbitan mengakses sifat atau kaedah tertentu sambil menyembunyikannya daripada kod luaran.

Contoh dengan Akses Betul:

class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

class Employee extends Person {
    public function showAge() {
        return $this->getAge();  // Correct: Accesses protected method within a subclass
    }
}

$employee = new Employee();
echo $employee->showAge();  // Output: 30
Salin selepas log masuk

Dalam contoh ini, getAge() ialah kaedah yang dilindungi, yang boleh diakses dalam kelas Pekerja, subkelas Orang.

Contoh dengan Ralat:

class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

$person = new Person();
echo $person->getAge();  // Error: Cannot access protected method Person::getAge()
Salin selepas log masuk

Mesej Ralat: Ralat maut: Ralat Tidak Ditangkap: Tidak dapat mengakses kaedah yang dilindungi Person::getAge()

Dalam kes ini, cuba mengakses kaedah yang dilindungi getAge() secara langsung daripada kejadian Orang mengakibatkan ralat kerana kaedah yang dilindungi tidak boleh diakses dari luar kelas.

3. Pengubahsuai Akses Peribadi

  • Kata kunci: peribadi
  • Keterlihatan: Hanya boleh diakses dalam kelas yang ditakrifkan. Tidak boleh diakses daripada subkelas atau kod luaran.
  • Kes Penggunaan: Gunakan persendirian untuk menyembunyikan sifat atau kaedah daripada sebarang kod di luar kelas, termasuk kelas terbitan.

Contoh dengan Akses Betul:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }

    public function showBalance() {
        return $this->getBalance();  // Correct: Accesses private method within the same class
    }
}

$account = new BankAccount();
echo $account->showBalance();  // Output: 1000
Salin selepas log masuk

Dalam contoh ini, kaedah getBalance() adalah peribadi, jadi ia hanya boleh diakses dalam kelas BankAccount. Kaedah showBalance() adalah awam dan boleh digunakan untuk mengakses getBalance() peribadi secara tidak langsung.

Contoh dengan Ralat:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }
}

$account = new BankAccount();
echo $account->getBalance();  // Error: Cannot access private method BankAccount::getBalance()
Salin selepas log masuk

Mesej Ralat: Ralat maut: Ralat Tidak Ditangkap: Tidak dapat mengakses kaedah peribadi BankAccount::getBalance()

Dalam kes ini, cuba mengakses kaedah persendirian getBalance() terus daripada contoh BankAccount mengakibatkan ralat kerana kaedah persendirian tidak boleh diakses dari luar kelas.

Contoh dengan Ralat dalam Subkelas:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }
}

class SavingsAccount extends BankAccount {
    public function showBalance() {
        return $this->getBalance();  // Error: Cannot access private method BankAccount::getBalance()
    }
}

$savings = new SavingsAccount();
echo $savings->showBalance();
Salin selepas log masuk

Mesej Ralat: Ralat maut: Ralat Tidak Ditangkap: Tidak dapat mengakses kaedah peribadi BankAccount::getBalance()

Di sini, kaedah persendirian getBalance() tidak boleh diakses walaupun kepada subkelas seperti SavingsAccount, menunjukkan bahawa kaedah persendirian tidak boleh diakses di luar kelas penentunya.

4. Ringkasan Pengubahsuai Akses

Pengubah suai Dalam Kelas Kelas Terbitan Di Luar Kelas
Modifier Inside Class Derived Class Outside Class
Public Yes Yes Yes
Protected Yes Yes No
Private Yes No No
Awam Ya Ya Ya

Dilindungi

Ya Ya Tidak Persendirian Ya Tidak Tidak
  • 5. Amalan Terbaik
  • Gunakan awam
  • dengan berhati-hati untuk mendedahkan perkara yang perlu sahaja. Lebih suka enkapsulasi dan dedahkan kefungsian melalui kaedah awam.
  • Gunakan dilindungi
  • untuk membenarkan subkelas mengakses sifat atau kaedah yang diperlukan sambil menyembunyikannya daripada kod luaran.

Gunakan peribadi untuk merangkum sepenuhnya dalaman kelas dan menghalang akses dari luar atau kelas terbitan.

Kesimpulan Pengubah suai akses PHP (awam, dilindungi, peribadi) menyediakan mekanisme untuk mengurus keterlihatan dan enkapsulasi dalam OOP. Dengan memahami dan menggunakan pengubah suai ini dengan betul, anda boleh mencipta kod yang lebih selamat dan boleh diselenggara.

Atas ialah kandungan terperinci Memahami Pengubahsuai Akses dalam PHP OOP: Awam, Dilindungi dan Peribadi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan