Bir özelliğin ya da bir yöntemin görünürlüğü, bildirim sırasında önüne şu
anahtar sözcüklerden biri getirilerek belirlenebilir:
public
, protected
ya da private
.
public olarak bildirilmiş öğereler her yerden
erişilebilir. protected bildirimli öğelere sadece
miras alınmış ve ebeveyn sınıflardan (ve öğenin tanımlandığı nesneden)
erişilebilir. private bildirimli öğelere ise sadece
öğenin tanımlandığı sınıfın içinden erişilebilir.
Sınıf üyeleri public
, protected
ya da
private
olarak tanımlanmalıdır.
Örnek 1 - Üye bildirimi
<?php
/**
* Sınıfım tanımı
*/
class Sınıfım
{
public $genel = 'Genel';
protected $korumalı = 'Korumalı';
private $özel = 'Özel';
function selamVer()
{
echo $this->genel;
echo $this->korumalı;
echo $this->özel;
}
}
$nesne = new Sınıfım();
echo $nesne->genel; // Çalışır
echo $nesne->korumalı; // Ölümcül Hata
echo $nesne->özel; // Ölümcül Hata
$nesne->selamVer(); // Genel, Korumalı ve Özel görüntüler
/**
* ÖbürSınıfım tanımı
*/
class ÖbürSınıfım extends Sınıfım
{
// public ve protected yöntemleri yeniden tanımlayabiliriz,
// ancak private olanlar tanımlanamaz
protected $korumalı = 'Öbür korumalı';
function selamVer()
{
echo $this->genel;
echo $this->korumalı;
echo $this->özel;
}
}
$nesne2 = new ÖbürSınıfım();
echo $nesne2->genel; // Çalışır
echo $nesne2->özel; // Tanımsız
echo $nesne2->korumalı; // Ölümcül Hata
$nesne2->selamVer(); // Genel, Öbür korumalı ve Undefined görüntülenir
?>
Bilginize: PHP 4'te bir değişken bildiriminde (
public
yerine) kullanılan var anahtar sözcüğü uyumluluk adına hala desteklenmektedir. PHP 5'in 5.1.3 sürümünden önceki sürümlerinde var kullanımı bir E_STRICT uyarısına sebep olurdu.
Sınıf yöntemleri public
, protected
ya da
private
olarak tanımlanmalıdır. Herhangi bir görünürlük
bildirimi yapılmamış yöntemlerin public
olarak tanımlandığı
varsayılır.
Örnek 2 - Yöntem bildirimi
<?php
/**
* Sınıfım tanımı
*/
class Sınıfım
{
// public kurucu bildirimi
public function __construct() { }
// public yöntem bildirimi
public function Genel() { }
// protected yöntem bildirimi
protected function Korumalı() { }
// private yöntem bildirimi
private function Özel() { }
// Bu da public bir yöntem
function Falanca()
{
$this->Genel();
$this->Korumalı();
$this->Özel();
}
}
$sınıfım = new Sınıfım;
$sınıfım->Genel(); // Çalışır
$sınıfım->Korumalı(); // Ölümcül Hata
$sınıfım->Özel(); // Ölümcül Hata
$sınıfım->Falanca(); // Public, Protected ve Private çalisir
/**
* ÖbürSınıfım tanımı
*/
class ÖbürSınıfım extends Sınıfım
{
// Bu public bir yöntemdir
function Filanca()
{
$this->Genel();
$this->Korumalı();
$this->Özel(); // Ölümcül Hata
}
}
$öbürSınıfım = new Sınıfım;
$öbürSınıfım->Genel(); // Çalışır
$öbürSınıfım->Filanca(); // Genel ve Korumalı çalışır, Özel çalışmaz
class Bar
{
public function dnm() {
$this->dnmÖzel();
$this->dnmGenel();
}
public function dnmGenel() {
echo "Bar::dnmGenel\n";
}
private function dnmÖzel() {
echo "Bar::dnmÖzel\n";
}
}
class Foo extends Bar
{
public function dnmGenel() {
echo "Foo::dnmGenel\n";
}
private function dnmÖzel() {
echo "Foo::dnmÖzel\n";
}
}
$fo = new Foo();
$fo->dnm(); // Bar::dnmÖzel
// Foo::dnmGenel
?>