PHP Sınıf (Class) Kullanımı ve Örnekler Bu makalede PHP’yi ileri seviye kullanımda işimize çok çok yarayacak ve uzmanlık seviyesinde öğrenmek zorunda kalacağımız class(sınıf) yapısını anlatacağım. Yazdığım kısımlarla ilgili örneklerde bulabilirsiniz.
Normalda class kullanmak zorunda değiliz, bir çok işimizi fonksiyonlarla da çözebiliriz. Fonksiyonlar bize çok kolaylık sağlıyor fakat PHP de class yapısı fonksiyonların sağladı kolaylığın 3-4 katını sağlıyor.
CLASS = “Fonksiyonların ve değişkenlerin bir arada olduğu kod paketidir.”;
Bu makalede classlarda kullanılan bazı özelliklere değineceğim.
1. private
2. public
3. static
4. __construct
5. __destruct
1. Private
Bu özellikte ki bir değişken ya da fonksiyon dışarıdan bir değer alamaz. Bu nesneyi sadece bu class içerisinde ki nesneler kullanabilir.
2. Public
Bu özelliklte ki bir değişken ya da fonksiyon dışarıdan değer alabilir. Dışarıdan diye kast ettiğim aslında, bu sınıfı kullanmak için tanımlıyoruz zaten ve tanımladıktan sonra bu class içerisinde ki nesneleri kullacağız. Peki biz bu nesneleri kullanırken bir de bunlara istediğimiz değerleri atamak istersek ? İşte bu yüzden dışarıdan diye yazıyorum.
3. Static
Diğer yazılım dillerinde de olduğu gibi “static” olarak tanımlanan nesneler uygulamanın çalıştığı sunucuda ki “RAM” üzerinde saklanır. Diğer veriler de tabiki RAM’de tutulur ancak “static” özelliğinde bir nesnenin RAM’de saklanma methodu diğerlerine göre farklıdır. Sürekli RAM üzerinde tutulduğu için “static” özellikli nesnelere veri gönderme ya da alma daha hızlıdır. “Static” özelliğinde bir nesneyi class içerisinde bir değişkene tanımlamadan da kullanabiliriz.
Diğer yazılım dillerinde de aynı aslında, her şeye static özelliği vermek pek akıllıca değil. Küçük uygulamalarda pek göze batmaz ama uygulama büyüdükçe sıkıntılar çıkartabilir. Çünkü biz, sürekli lazım olacak verileri static olarak tanımlarız ve sürekli ram’de dursun ve her ihtiyacım olduğu anda hızlıca ulaşabileyim. Sürekli ihtiyacımız olmayan verileri ram’de tutmamızın bize hiç bir yararı olmaz.
Static özelliğinin kullanımında diğer özelliklere göre biraz farklılık var. Bunu bir örnekle göstermek istiyorum.
class ogrenciler { static $isim = "Serdar KARACA"; static function isim_yazdir() { echo self::$isim; } } $ogrenci = new ogrenciler(); $ogrenci::isim_yazdir();
Yukarıda ki örnekte “self” kullandık. Bunu static olan her fonksiyonda kullanmak zorundayız. Diğer özelliklerde sınıf içerisinden bir nesneyi çağırırken “$this->” kullanıyoruz fakat static olarak tanımladığımız nesneleri “self::” ile çağıracağız.
Static fonksiyonu çağırırken de ‘::’ (2 tane üst üste nokta) kullanıyoruz.
4. __construct
Genelde bu methodu fonksiyona isim olarak veririz ve sınıfı kullanırken sınıfı tanımladığımız anda bu method çalışır.
class ogrenciler { static $ogrenci = "Serdar KARACA"; function __construct() { echo self::$ogrenci; } }
Yukarıda ki örnekte static olarak $ogrenci adında bir değişken ve __construct adında bir fonksiyon tanımladım. Bu fonksiyon $ogrenci değişkeninin içeriğini yazdırıyor. Bu methodu kullanımıda şu şekilde ;
$test = new ogrenciler(); /* bu sınıfı tanımlamamızla beraber __construct fonksiyonu da direkt olarak çalıştı, ekstradan çalıştırmamıza gerek kalmadı. */
Bu method içerisinde eğer parametreler kullanmak istiyorsak bunu da şöyle yapabiliriz;
class ogrenciler { static $ogrenci = "Serdar KARACA"; function __construct($parametre_1, $parametre_2, $parametre_3) { echo self::$ogrenci; } } $test = new ogrenciler('deger_1', 'deger_2', 'deger_3');
5. __destruct
Bu method’da __construct gibi çağırmasak bile çalışır. __construct farklı sınıfı tanımladığımız anda değil, sınıfın bitiminde çalışır. Bunu en çok class sonunda yapmak istediğimiz işler için kullanırız.
Anlatıma örnekleri yaparak devam etmek istiyorum.
Classları hazırlandıktan sonra tıpkı fonksiyonlar gibi çağırıyoruz. Örnek olarak “ogrenciler” adında bir class oluşturalım ve içerisinde ki değişkenlere değerler atayıp ekrana yazdıralım.
class ogrenciler { public $isim; public $soyisim; public $kayit_tarihi; private $okul; // Bunu private tanımlıyorum açıklamasını aşağıda yapacağım. function isim_soyisim() { echo "İsim " .$this->isim . ", Soyisim : " .$this->soyisim; } function kayit_tarihi() { $tarih = date('Y') - $this->kayit_tarihi; echo "Kayıt Tarihi : " .$tarih; } }
“ogrenciler” adında bir class oluşturduk ve içerisine istediğimiz fonksiyonları yazdık.
Şimdi bu classı kullanarak ekrana birşeyler yazdıralım.
$ogrenci = new ogrenciler(); $ogrenci -> isim = "Serdar"; $ogrenci -> soyisim = "Karaca"; $ogrenci -> kayit_tarihi = "2015"; $ogrenci -> isim_soyisim(); // ogrenci değişkenine ogrenciler classı içerisinde ki "isim_soyisim" fonksiyonunu çağırdık. $ogrenci -> kayit_tarihi(); // ogrenci değişkenine ogrenciler classı içerisinde ki "kayit_tarihi" fonksiyonunu çağırdık.
Ekran çıktısı şu şekilde olacaktır;
İsim Serdar, Soyisim Karaca
Kayıt Tarihi : 2015
Yukarıda ki kodlarda dikkat edeceğiniz önemli kısım, değişkenleri $this->degisken şeklinde yazarken “$” işareti sadece “this” ibaresinin önünde bulunur. İkinci önemli kısım ise “private” olarak tanımladığımız değişkenleri dışarıdan yazdırmak mümkün değildir.
Private için örnek ;
echo $ogrenci->okul; // bu kod hata verecektir. /* Fatal error: Cannot access private propery ogrenciler::$okul in xxx.php on line 25 */
“Private” olarak tanımladığımız değişkenleri sadece class içerisinde fonksiyonlar tarafından kullanılabiliriz. Class dışarısından her hangi bir müdahale yapamayız.
“Private” olarak tanımladığımız değişkenleri class dışarısından illa çağırmak istiyorsak eğer class yapımızda küçük bir değişiklik yapmamız gerekiyor.
class ogrenciler { public $isim; public $soyisim; public $kayit_tarihi; private $okul="ITU"; // bu kısımda değişiklik yaptım. function isim_soyisim() { echo "İsim " .$this->isim . ", Soyisim : " .$this->soyisim; } function kayit_tarihi() { $tarih = date('Y') - $this->kayit_tarihi; echo "Kayıt Tarihi : " .$tarih; } // Yeni bir fonksiyon ekliyorum. function okul($okul_adi) { if($okul_adi=="nolur_soyle") { echo "Okulumuzun Adı : " .$this->okul; } else { echo "Olmadı, Okul Adını Yazmacağım..."; } } }
Yukarıda ki yeni classa göre fonksiyonu şu şekilde çağırabiliriz ;
$ogrenci = new ogrenciler(); $ogrenci -> okul("nolur_soyle");
Bunun ekrana çıktısı şöyle olacaktır ;
Okulumuzun Adı : ITU
çok yararlı oldu son private e yazdıgın koda bayıldım