{"id":654,"date":"2013-12-24T00:05:43","date_gmt":"2013-12-23T22:05:43","guid":{"rendered":"http:\/\/www.gencnesil.org\/?p=654"},"modified":"2014-03-20T15:17:08","modified_gmt":"2014-03-20T13:17:08","slug":"php-class-yapisi","status":"publish","type":"post","link":"https:\/\/gncz.net\/index.php\/php-class-yapisi.html","title":{"rendered":"Php class yap\u0131s\u0131"},"content":{"rendered":"<p>S\u0131n\u0131flara bir \u00e7ok fonksiyonu bir d\u00fczene g\u00f6re bir arada bar\u0131nd\u0131ran yap\u0131lard\u0131r. Belli bir konu ya da olay\u0131n fonksiyonlar\u0131n\u0131 i\u00e7erir ve belli bir amac\u0131 oldu\u011fu i\u00e7in s\u0131n\u0131f kurulma ihtiyac\u0131 duyulur.<!--more--> Mesela bir toplama i\u015flemi i\u00e7in s\u0131n\u0131f tan\u0131mlamam\u0131za gerek yok, ama bir \u00fcyelik ya da al\u0131\u015fveri\u015f sepeti i\u00e7in s\u0131n\u0131f haz\u0131rlayabilirsin.<\/p>\n<p>\u00dcyelik \u00f6rne\u011finden gidelim, \u00fcyelik s\u0131n\u0131f\u0131nda \u00fcye ekleme, silme, d\u00fczenleme ve listeleme fonksiyonlar\u0131 olur. Sadece bir \u00fcyelik s\u0131n\u0131f\u0131 ile t\u00fcm bu \u00fcyelik fonksiyonlar\u0131na ula\u015fabilirsin. Sadece bir arada ula\u015fman\u0131n da d\u0131\u015f\u0131nda ayn\u0131 zamanda fonksiyonlar\u0131n aras\u0131nda s\u0131n\u0131f i\u00e7inde veri transferi de sa\u011flayabilirsin.<\/p>\n<p>Verdi\u011fim \u00fcyelik \u00f6rne\u011fi \u00fczerine bir \u00fcyelik s\u0131n\u0131f\u0131 haz\u0131rlayay\u0131m.<\/p>\n<pre>class uyeler {\r\n   public $veriler;\r\n   function ekle($ad, $soyad) {\r\n      $this-&gt;veriler[] = array('ad' =&gt; $ad, 'soyad' =&gt; $soyad);\r\n   }\r\n\r\n   function duzenle($no, $ad, $soyad) {\r\n      if(!isset($this-&gt;veriler[$no])) return false; \/\/ e\u011fer yoksa olumsuz\r\n      $this-&gt;veriler[$no] = array('ad' =&gt; $ad, 'soyad' =&gt; $soyad);\r\n      return true;\r\n   }\r\n\r\n   function sil($no) {\r\n      unset($this-&gt;veriler[$no]);\r\n   }\r\n\r\n   function listele() {\r\n      foreach($this-&gt;veriler as $no =&gt; $uye) {\r\n         echo $no . ' - ' . $uye['ad'] . ' ' . $uye['soyad'] . '\r\n';\r\n      }\r\n   }\r\n}<\/pre>\n<p>E\u011fer bu s\u0131n\u0131f yap\u0131s\u0131n\u0131 ilk g\u00f6r\u00fc\u015f\u00fcn ise \u00f6ncelikle $this de\u011fi\u015fkenini tan\u0131\u015ft\u0131rmakla ba\u015flayabilirim. Fonksiyonlar\u0131n i\u00e7inde \u00e7a\u011f\u0131rd\u0131\u011f\u0131m\u0131z $this, o s\u0131n\u0131f i\u00e7ersinde tan\u0131mlanm\u0131\u015f bir global de\u011fi\u015fken gibidir. Nas\u0131l bir fonksiyonlar\u0131n i\u00e7inde kullan\u0131lan de\u011fi\u015fkenler sadece kendi i\u00e7lerinde varlarsa, t\u00fcm s\u0131n\u0131f\u0131n i\u00e7erisinde varolmas\u0131 istenen de\u011fi\u015fkenlerde bu $this de\u011fi\u015fkeni \u00fczerinde bar\u0131nd\u0131r\u0131l\u0131r.<\/p>\n<pre>$liste = new uyeler();\r\n$liste-&gt;ekle('Musa', 'Avc\u0131'); \/\/ 0 nolu \u00fcye eklendi\r\n$liste-&gt;ekle('Bill', 'Gates'); \/\/ 1 nolu \u00fcye eklendi\r\n$liste-&gt;duzenle(0, 'Mehmet', 'Y\u0131lmaz'); \/\/ 0 nolu \u00fcye d\u00fczenlendi\r\n$liste-&gt;sil(1);<\/pre>\n<p>Buradaki \u00f6rnektede yukardaki \u201cuyeler\u201d s\u0131n\u0131f\u0131n\u0131 kulland\u0131m, t\u00fcm bir s\u0131n\u0131f\u0131 $liste ad\u0131nda bir de\u011fi\u015fkene y\u00fckledim ve t\u00fcm bu i\u00e7eri\u011fi sadece o de\u011fi\u015fken \u00fczerinden kontrol edebilirim. Ayr\u0131ca bir di\u011fer espiriside ayn\u0131 s\u0131n\u0131ftan birden fazla olu\u015fturabiliyor olmam\u0131z.<\/p>\n<pre>$ogrenci = new uyeler();\r\n$sanatci = new uyeler();\r\n\/\/ ...\r\n$ogrenci-&gt;ekle('Musa', 'Avc\u0131');\r\n$sanatci-&gt;ekle('Bar\u0131\u015f', 'Man\u00e7o');<\/pre>\n<p>Ayn\u0131 s\u0131n\u0131f\u0131 iki ba\u011f\u0131ms\u0131z de\u011fi\u015fken \u00fczerinde tan\u0131mlayarak her birinde ayr\u0131 i\u015flem yapabilir ve sonra istedi\u011fimizin verilerine ula\u015fabiliriz.<br \/>\nS\u0131n\u0131flar\u0131n yap\u0131c\u0131 ve y\u0131k\u0131c\u0131 metodlar\u0131<\/p>\n<p>Bir s\u0131n\u0131f olu\u015ftururken e\u011fer o s\u0131n\u0131f\u0131n i\u00e7ine ayn\u0131 isimde bir metod tan\u0131mlarsak bu ayn\u0131 zamanda o s\u0131n\u0131f\u0131n yap\u0131c\u0131 metodu olur. Yap\u0131c\u0131 metod s\u0131n\u0131f ilk olu\u015fturulmak istendi\u011finde otomatik \u00e7a\u011fr\u0131l\u0131r, yani \u201cnew class()\u201d denildi\u011finde. Metodun ayn\u0131 ad\u0131n\u0131 kullanmak yerine \u201c__construct\u201d \u015feklinde de yazabilirsiniz.<\/p>\n<pre>class deneme {\r\n   function deneme() {\r\n      echo 'S\u0131n\u0131f yap\u0131c\u0131s\u0131 \u00e7al\u0131\u015ft\u0131!';\r\n   }\r\n}\r\n\r\n$deneme = new deneme();<\/pre>\n<p>Ekranda \u201cS\u0131n\u0131f yap\u0131c\u0131s\u0131 \u00e7al\u0131\u015ft\u0131!\u201d yazar. Ayr\u0131ca bu metoda ekleyece\u011fimiz parametreler s\u0131n\u0131f ilk \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda kullan\u0131labilir.<\/p>\n<pre>class kedi {\r\n   function kedi($isim) {\r\n      $this-&gt;isim = $isim;\r\n   }\r\n\r\n   function miyav() {\r\n      echo $this-&gt;isim . ': Miyav!';\r\n   }\r\n}\r\n\r\n$kedi = new kedi('\u00c7omar');\r\n$kedi-&gt;miyav();<\/pre>\n<p>Ekranda \u201c\u00c7omar: Miyav!\u201d yazar.<\/p>\n<p>Y\u0131k\u0131c\u0131 metodu \u201c__destruct\u201d s\u0131n\u0131f\u0131n yok edilece\u011fi s\u0131ra \u00e7al\u0131\u015f\u0131r, bu genellikle t\u00fcm ifadelerden sonra ger\u00e7ekle\u015fir. Kullan\u0131m\u0131na \u00f6rnek vermek gerekirse bir veritaban\u0131 s\u0131n\u0131f\u0131nda y\u0131k\u0131c\u0131 metoda veritaban\u0131 ile ba\u011flant\u0131s\u0131n\u0131 kesme komutunu verebilirsiniz, fakat bu i\u015flemi normal ba\u011flant\u0131larda PHP otomatik olarak yapmaktad\u0131r.<\/p>\n<pre>class deneme {\r\n   function __destruct() {\r\n      echo 'S\u0131n\u0131f yok ediliyor.';\r\n   }\r\n\r\n   function deneme() {\r\n      echo 'Selam D\u00fcnya!';\r\n   }\r\n}\r\n\r\n$deneme = new deneme();<\/pre>\n<p>Ekranda \u201cSelam D\u00fcnya! S\u0131n\u0131f yok ediliyor.\u201d yazar.<br \/>\nS\u0131n\u0131flar\u0131n miras al\u0131nmas\u0131<\/p>\n<p>Bir \u00e7ok dilde de extends ifadesiyle ger\u00e7ekle\u015fen miras olay\u0131 ise ad\u0131 \u00fczerinde bir s\u0131n\u0131fa miras al\u0131nan s\u0131n\u0131f\u0131n metodlar\u0131n\u0131 ve de\u011ferlerini dahil eder.<\/p>\n<p>Ben bunun rahat anla\u015f\u0131lmas\u0131 i\u00e7in yine bir \u00fcye s\u0131n\u0131f\u0131 ve bu s\u0131n\u0131f\u0131 miras alan \u00f6\u011frenci ve \u00f6\u011fretmen s\u0131n\u0131flar\u0131 yapaca\u011f\u0131m.<\/p>\n<pre>class uye {\r\n   public $ad;\r\n   public $soyad;\r\n\r\n   function isim($ad, $soyad) {\r\n      $this-&gt;ad = $ad;\r\n      $this-&gt;soyad = $soyad;\r\n   }\r\n\r\n   function isim_yaz() {\r\n      echo $this-&gt;ad . ' ' . $this-&gt;soyad;\r\n   }\r\n}\r\n\r\nclass ogrenci extends uye { \/\/ uye s\u0131n\u0131f\u0131n\u0131 miras ald\u0131k\r\n   public $sinif;\r\n\r\n   function sinif($sinif) {\r\n      $this-&gt;sinif = $sinif;\r\n   }\r\n\r\n   function sinif_yaz() {\r\n      echo 'S\u0131n\u0131f: ' . $this-&gt;sinif;\r\n   }\r\n}\r\n\r\nclass ogretmen extends uye { \/\/ uye s\u0131n\u0131f\u0131n\u0131 miras ald\u0131k\r\n   public $ders;\r\n\r\n   function ders($ders) {\r\n      $this-&gt;sinif = $ders;\r\n   }\r\n\r\n   function ders_yaz() {\r\n      echo 'Ders: ' . $this-&gt;ders;\r\n   }\r\n}\r\n\r\n$ogrenci = new ogrenci();\r\n$ogrenci-&gt;isim('\u0130nek', '\u015eaban'); \/\/ bu metod uye s\u0131n\u0131f\u0131ndan miras.\r\n$ogrenci-&gt;sinif('Hababam'); \/\/ bu ise ogrenci s\u0131n\u0131f\u0131na ait metod.\r\n\r\n$ogretmen = new ogretmen();\r\n$ogretmen-&gt;isim('Mahmut', 'Hoca'); \/\/ bu metod uye s\u0131n\u0131f\u0131ndan miras.\r\n$ogretmen-&gt;ders('Hayat Bilgisi'); \/\/ bu ise ogretmen s\u0131n\u0131f\u0131na ait metod.<\/pre>\n<p>\u201c\u00fcye\u201d s\u0131n\u0131f\u0131nda olan isim metodu, hem \u201c\u00f6\u011frenci\u201d hem de \u201c\u00f6\u011fretmen\u201d s\u0131n\u0131flar\u0131nda kullan\u0131lacak bir metod oldu\u011fu i\u00e7in o s\u0131n\u0131flarda da benzer metodlar tan\u0131mlamak yerine \u201c\u00fcye\u201d s\u0131n\u0131f\u0131n\u0131 miras alarak o s\u0131n\u0131f\u0131n b\u00fcnyesine dahil etmi\u015f olduk.<br \/>\nS\u0131n\u0131f de\u011ferlerinin g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fc<\/p>\n<p>S\u0131n\u0131flar\u0131 ifade ederken ilk sat\u0131rlar\u0131na yazd\u0131\u011f\u0131m\u0131z de\u011ferler yukar\u0131da da bahsetti\u011fim gibi t\u00fcm s\u0131n\u0131f i\u00e7erisinde $this de\u011fi\u015fkeni ile ula\u015f\u0131labilen de\u011ferlerdir. Bu de\u011ferlere public, private ve protected ad\u0131nda 3 farkl\u0131 g\u00f6r\u00fcn\u00fcrl\u00fck tan\u0131mlayabiliyoruz.<\/p>\n<pre>\u201cpublic\u201d dedi\u011fimizde o de\u011fi\u015fkene s\u0131n\u0131f d\u0131\u015far\u0131s\u0131ndan da eri\u015fime izin vermi\u015f oluyoruz.\r\nclass uye {\r\n   public $isim; \/\/ herkese a\u00e7\u0131k de\u011fer\r\n\r\n   function uye($isim) {\r\n      $this-&gt;isim = $isim;\r\n   }\r\n}\r\n\r\n$uye = new uye('Musa');\r\necho $uye-&gt;isim; \/\/ s\u0131n\u0131f i\u00e7erisindeki de\u011fi\u015fkene ula\u015ft\u0131k.<\/pre>\n<p>Bu kullan\u0131mda herhangi bir hatayla kar\u015f\u0131la\u015fmazken \u201cprivate\u201d ya da \u201cprotected\u201d dedi\u011fimizde d\u0131\u015far\u0131dan ula\u015f\u0131lmaya \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda hata verir. Bunlar\u0131n kullan\u0131m\u0131na \u00f6rnek olarak e\u011fer d\u0131\u015far\u0131dan de\u011fi\u015ftirilmesini ya da okunmas\u0131n\u0131 istemedi\u011finiz ve sadece s\u0131n\u0131f i\u00e7erisinde i\u015flemler yapmak i\u00e7in tutaca\u011f\u0131n\u0131z \u015fifre gibi de\u011ferlerde tutabilirsiniz.<\/p>\n<p>\u201cprivate\u201d ve \u201cprotected\u201d fark\u0131 ise private dedi\u011fimizde bu s\u0131n\u0131f\u0131 miras alan (extends eden) alt s\u0131n\u0131flara bu de\u011ferin ula\u015fmamas\u0131 sa\u011flan\u0131yor. \u201cprotected\u201d de ise sadece d\u0131\u015far\u0131dan ula\u015f\u0131lmas\u0131 engelleniyor, alt s\u0131n\u0131flardan ula\u015f\u0131labilir.<br \/>\nMetod zincirleme<\/p>\n<p>Bu pratik y\u00f6ntem sayesinde art arda metodlar \u00e7a\u011f\u0131rabilirsiniz. Tek yapman\u0131z gereken zincirleme metod yapmak istedi\u011finiz metodda sonu\u00e7 olarak \u201creturn $this;\u201d demek. Bu sayede metod \u00e7a\u011f\u0131r\u0131ld\u0131ktan sonra sonu\u00e7 olarak kendisini yani s\u0131n\u0131f\u0131 d\u00f6nd\u00fcrecek ve biz tekrar metod \u00e7a\u011f\u0131rmaya devam edece\u011fiz.<\/p>\n<pre>class islem {\r\n   public $sonuc = 0;\r\n\r\n   function topla($sayi) {\r\n      $this-&gt;sonuc = $this-&gt;sonuc + $sayi;\r\n      return $this;\r\n   }\r\n\r\n   function carp($sayi) {\r\n      $this-&gt;sonuc = $this-&gt;sonuc * $sayi;\r\n      return $this;\r\n   }\r\n\r\n   function sonuc() {\r\n      echo $this-&gt;sonuc;\r\n   }\r\n}\r\n\r\n$x = new islem();\r\n$x-&gt;topla(5)-&gt;carp(10)-&gt;sonuc();\r\n\/\/ ekranda 50 yazar.\r\n\r\n\/\/ normal yolla yapsayd\u0131k her seferinde $x tekrar ifade etmemiz gerekirdi\r\n$x-&gt;topla(5);\r\n$x-&gt;carp(10);\r\n$x-&gt;sonuc();<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>S\u0131n\u0131flara bir \u00e7ok fonksiyonu bir d\u00fczene g\u00f6re bir arada bar\u0131nd\u0131ran yap\u0131lard\u0131r. Belli bir konu ya da olay\u0131n fonksiyonlar\u0131n\u0131 i\u00e7erir ve belli bir amac\u0131 oldu\u011fu i\u00e7in s\u0131n\u0131f kurulma ihtiyac\u0131 duyulur.<\/p>\n","protected":false},"author":1,"featured_media":724,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[20],"tags":[],"_links":{"self":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts\/654"}],"collection":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/comments?post=654"}],"version-history":[{"count":3,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts\/654\/revisions"}],"predecessor-version":[{"id":782,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts\/654\/revisions\/782"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/media\/724"}],"wp:attachment":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/media?parent=654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/categories?post=654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/tags?post=654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}