PHP'de sınıflarda görünürlük (visibility) ve erişim türleri, sınıfın özelliklerine (properties) ve metotlarına (methods) dışarıdan erişim düzeyini belirler. Üç ana erişim türü bulunmaktadır: public
, protected
ve private
.
-
public:
- Herkes tarafından erişilebilir.
- Sınıf dışından, sınıf içinde, alt sınıflardan ve hatta diğer dosyalardan erişilebilir.
-
protected:
- Sadece sınıf içinde ve alt sınıflarda erişilebilir.
- Sınıf dışından doğrudan erişim mümkün değildir.
-
private:
- Sadece tanımlandığı sınıf içinde erişilebilir.
- Alt sınıflar ve sınıf dışından doğrudan erişim mümkün değildir.
İşte bu kavramları anlamak için bir örnek:
<?php
class OrnekSinif {
// public özellik
public $publicOzellik = "Bu bir public özelliktir.";
// protected özellik
protected $protectedOzellik = "Bu bir protected özelliktir.";
// private özellik
private $privateOzellik = "Bu bir private özelliktir.";
// Constructor (__construct) metodu
public function __construct() {
echo "Constructor çağrıldı.
";
echo $this->publicOzellik . "
"; // Doğrudan erişim
echo $this->protectedOzellik . "
"; // Doğrudan erişim
echo $this->privateOzellik . "
"; // Doğrudan erişim
}
// Bir işlem gerçekleştiren metot
public function islemYapanMetod() {
echo "Bu bir public metottur.
";
}
// protected metot
protected function protectedMetot() {
echo "Bu bir protected metottur.
";
}
// private metot
private function privateMetot() {
echo "Bu bir private metottur.
";
}
}
// Sınıfı kullanarak örnek oluşturma
$ornek = new OrnekSinif();
// Sınıf dışından public özelliklere erişim
echo $ornek->publicOzellik . "
";
// Sınıf dışından public metoda erişim
$ornek->islemYapanMetod();
// Diğer erişim türleri sınıf dışından erişilemez:
// echo $ornek->protectedOzellik; // Hata verir
// echo $ornek->privateOzellik; // Hata verir
// $ornek->protectedMetot(); // Hata verir
// $ornek->privateMetot(); // Hata verir
?>
Bu örnekte, sınıf içinde tanımlanan özellik ve metotlara erişim, belirlenen erişim türlerine göre farklılık göstermektedir. public
olanlar sınıf dışından erişilebilirken, protected
ve private
olanlar sadece sınıf içinde kullanılabilir.