Sınıflar ve Nesneler (PHP 5)
PHP Manual

Görünürlük

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.

Üyelerin Görünürlüğü

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.

Yöntem Görünürlüğü

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

?>


Sınıflar ve Nesneler (PHP 5)
PHP Manual