26 / 06 / 2009

public, private, protected

ekleyen: Emre Çevik kategori: ipuçları| php

bu yazıda sizlere public, protected ve private kullanımını anlatmaya çalışacağım. ilk olarak ne anlama geldiklerine bakalım.

public olarak işaretlenen öğeye hem sınıf içinden, hemde dışarıdan ulaşılabilir.
protected olarak işaretlenen öğeye hem sınıf içerisinden hemde bu sınıf tarafından kalıtım yoluyla türemiş sınıflardan ulaşılabilir.
private olarak işaretlenmiş öğeye ise sadece sınıf içerisinden ulaşılabilir.

şimdi bir örnekle devam edelim :

class sinif {
 
    public $isim;
    protected $soyisim;
    private $sifre;
 
    function __construct () {
 
        $this->isim     = 'emre';
        $this->soyisim  = 'cevik';
        $this->sifre    = '123456';
    }
 
    function goster()
    {
        echo $this->isim.'<br>';
        echo $this->soyisim.'<br>';
        echo $this->sifre.'<br>';
    }
 
   public function __get($key) {
      return $this->$key;
   }
}

sinifimizi tanimladik simdi sinifimizdaki değişkenlere ulaşmaya çalışacağız

sınıfımızı oluşturalım :

$A = new sinif();

sınıf öğelerine dışardan ulaşmaya çalışalım :

echo $A->isim;
echo $A->soyisim;
echo $A->sifre;

bu kodun ekran çıktısı aşağıdaki gibi olur

emre
Fatal error: Cannot access protected property sinif::$soyisim
Fatal error: Cannot access private property sinif::$sifre

yani burdan anlıyoruzki private ve protected olan değişkenlere sınıf dışarısından ulaşamıyoruz.

şimdi sınıf içindeki goster() methodunu kullanarak ulaşalım

$A->goster();

bu kodun ekran çıktısı :

emre
cevik
123456

evet böylece 3 değişkenede sınıf içerisinden erişebildiğimizi gördük.

private ve protected değişkenlere dışardan ulaşmanın bir yöntemide sınıf içerisinde public bir fonksiyon tanımlayıp private olan değeri dışarı aktarmaktır.

echo $A->__get(’sifre’);

kodunu çalıştırdığımızda ekran çıktısı

123456

olacaktır.

şimdi örneğimizi biraz geliştirelim bir sınıf daha oluşturalım ve bunu “sinif” sınıfından türetelim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class sinif {
 
    public $isim;
    protected $soyisim;
    private $sifre;
 
    function __construct () {
 
        $this->isim     = 'emre';
        $this->soyisim  = 'cevik';
        $this->sifre    = '123456';
    }
 
    function goster()
    {
        echo $this->isim.'<br>';
        echo $this->soyisim.'<br>';
        echo $this->sifre.'<br>';
    }
 
 
}
 
class turemis extends sinif {
 
    function __construct () {
        parent::__construct();
    }
 
    public function goster()
    {
        echo $this->isim.'<br>';
        echo $this->soyisim.'<br>';
        echo $this->sifre.'<br>';
    }
}

sınıfımızı oluşturalım :

$A = new turemis();

sınıf öğelerine dışardan ulaşmaya çalışalım :

echo $A->isim;
echo $A->soyisim;
echo $A->sifre;

bu kodun ekran çıktısı aşağıdaki gibi olur

emre
Fatal error: Cannot access protected property turemis::$soyisim
// boş veri döndürür

public veriye dışardan ulaşabilirken, önceki örnekte olduğu gibi protected üyeye ulaşamadık. private ise kalıtımda turemis sınıfına aktarılmadığı için boş değer olarak döndü.

şimdi sınıf içindeki goster() methodunu kullanarak ulaşalım

$A->goster();

bu kodun ekran çıktısı :

emre
cevik
// bos veri döndürür

yani burdan anlıyoruzki türemiş sınıflar türetildikleri sınıfın protected ve public değişkenlerine ulaşırken. private değişkenlerine ulaşamazlar.

  • Digg
  • del.icio.us
  • Facebook
  • Google
  • BlinkList
  • blogmarks
  • description
  • Furl
  • Ma.gnolia
  • NewsVine
  • Reddit
  • Technorati

benzer konular:

  1. adapter design pattern – php
  2. singleton design pattern – php
  3. decorator design pattern – php
  4. iterator design pattern – php
  5. polymorphism
  6. proxy design pattern – php
  7. bridge design pattern – php
  8. memento design pattern – php
  9. command design pattern – php
  10. flyweight design pattern – php


(1 votes, average: 5.00 out of 5)
Loading ... Loading ...

4 yorum

1 | Omer

26 / 06 / 2009 - 14:59

Avatar

Hocam hemen yetişti makalem teşekkürler :)

2 | Emre Çevik

26 / 06 / 2009 - 22:32

Avatar

umarım açıklayıcı olmuştur. kullanımı methodlardada aynı şekilde.

3 | Mustinet

28 / 06 / 2009 - 22:53

Avatar

Bilgi verici bir yazı olmuş. Nesne yönelimli programlamaya başlayan birçok arkadaş bu değerlerin ne anlama geldiği bilmeden sınıf yazmaya ve yanlış ve gereksiz kullanımlar ile sınıf oluşturuyorlar.
Teşekkürler Emre.

4 | Hacı Osman

01 / 08 / 2009 - 06:53

Avatar

Bu konudaki en iyi Türkçe makale, tebrikler çok iyi anlatmışsınız.

yorum yaz

ne yapıyoruz

eğleniyoruz?

anket

design pattern yazılarını nasıl buldunuz?

sonuçlar

Loading ... Loading ...