• 15-07-2010, 14:01:14
    #2
    arkadaşlar bundan 3 ay önce sanırım konu acmıstım r10.nete OOP hakkında Bilgi istemiştim pekde Faydalı Bilgiler Bulamamıştım O konuda belirtmiştim öğreneceğim bu işi diye ve öğrendiklerimi bu konu altında paylaşmak istedim
    anlatımlarımdaki yalnışlarımı düzelten olursa sevinirim en azından daha net bilgiye varmış olurum olumlu olumsuz yorumlarada açığım

    öncelikle nesnel programlamada öğrenilmesi gerekenlerin başında gelen şey sınıf tanımlama ve çağırmadır bu gibi anlatımları bazı arkadaşlar kendi bloglarında yayınlamış bu yüzden bende başladığım yerden aktarmaya devam ediyorum

    Fırsat Buldukca ve Yeni Öğreneceğim Terimlerin Açıklamalı örnekli Olarak kod Bloglarını ekleyeceğim


    Not: Konuyu Sabitlendiği için Sdemirkeser ustaya Tşk ederim
    Yalnışlarımı Düzeltin Lütfen
    arkadaşlar


    Public: Foknsiyona sınıf içinden ve sınıf dışından erişime izin verir.Ayrıca Kalıtım ile aktarılır.
    Private: Bu erişim belirteci işaretlenen öğeye sadece sınıfın içinden erişilebileceği anlamına gelir.Ve bu öğeler kalıtım yoluyla aktarılmaz..
    Protected:Bu erişim belirteci işaratelenen ögeye sadece sınıfın içinden erişilebileceği fakat alt sınıflara aktarılabileceği anlamına gelmektedir.
    Extends:Eğer sınıfımız başka bir sınıfın alt sınıfı olacaksa extends anahtar sözcüğü ile aktarılır.


    1    //Public Örneği
    2    class sinifim {
    3     public function yazdir(){
    4     echo "Merhaba Dünya";
    5     }
    6    }
    7    //Örnek 1
    8    /*$yeni_sinif = new sinifim();
    9    $yeni_sinif->yazdir();*/
    Gördüğünüz Gibi Fonksiyonumuza Dışarıdan Erişim Sağlayabiliyoruz...
    şimdi private özelliğini kullanarak deneyelim


    1    //Private Örneği
    2    class sinifim {
    3     private  function yazdir(){
    4     echo "Merhaba Dünya";
    5     }
    6    }
    7    //Örnek 2
    8    /*$yeni_sinif = new sinifim();
    9    $yeni_sinif->yazdir();*/
    Fatal error: Cannot redeclare class sinifim in Böyle Bir Hata Aldık yani dışarıdan Erişim Yok

    Şimdide Protected özelliğine gecelim



    01    class sinifim {
    02     protected   function yazdir(){
    03     echo "Merhaba Dünya";
    04     }
    05    }
    06    class alt_sinif extends sinifim {
    07     public function alt_metod(){
    08     $this->yazdir();
    09     }
    10    }
    11     
    12    //Örnek 3
    13    /*$yeni_sinif = new alt_sinif();
    14    $yeni_sinif ->alt_metod();*/
    Burada Görüldüğü üzere Sadece Alt Sınıf ta kullanabiliyoruz ama gelen degeri ekrana basamıyoruz





    Extends nedir
    Extends bir sınıfı genişletme anlamına gelir yani 2 adet sınıfımız var ama 1 tanesine sonradan eklenti yapmak istiyoruz

    kullanımı
    class sinif_2 Extends sinif_1{
    
    
    }
    buradaki su anlama geliyor sinif_2 sinif_1'in alt sınıfıdır ne işimize yarıyor
    baska bir sınıfta iken direk ana sınıftaki metodları ve özelikleri kullanbiliyoruz yeni özellikler eklemiş oluyorz
    alt sınıfı cağırdıgımızda ana sınıfada aktarım yapabiliriz detaylı örnek


        class sinifim {
        var $deger;
        protected   function yazdir(){
         echo "Merhaba Dünya Ben Ana Sınıftan Geliyorum <br>";
         }
       }
       
       
       
       
       
       
       
        class alt_sinif extends sinifim {
        public function alt_metod()
        {
        $this->yazdir();
         }
         public function iceriden (){
             echo "Bende Alt Sınıftan Geliyorum";
         }
        }
                                          
      
        
        
    //Örnek 4
    $yeni_sinif = new alt_sinif();
    //alt sınıfa bağlanarak üst sınıftaki methodu cağırdık
    $yeni_sinif ->alt_metod();
    //alt sınıfa bağlanarak içersindeki iceriden() methodunu cağırdık
    $yeni_sinif->iceriden();
    
    
    // Alt Sınıfı Çağırıyor ama üst sınıftaki özelliğe deger atıyoruz
    $alt_siniftan_ana_sinifa_gonder = new alt_sinif();
    $alt_siniftan_ana_sinifa_gonder->deger = "bakın burada ise alt sınıfı  çağırıyor ama üst sınıfın özelliğine atama yapıyoruz"
    yani sınıfımızın herhangi bir sınıfa bağlı olacağını belirtir örnekteki gibi örnekte ne yaptık
    sinifim isimli siniftan alt_sinifim isimli sınıfa yazdir() methodunu cektik
    ve alt sınıfı çağırarak üst sınıftaki $deger özelliğine atama yaptık umarım anlaşılır olmuştur arkadaşlar
    Kaynak







    __________________________________________________ _____________





    __construct
    fonksiyonu arkadaşlar bir sınıf çağrıldıgında sınıftaki kod blogu işlemini yapmadan önce çalışmasını istediğimiz metod'dur
    örnek eger kullanıcı ismi doğru ise işleme başlasın değil ise işlemi durdursun


    01    <?
    02    class sinifim {
    03     var $kullanici;
    04     var $sifre;
    05     public function __construct($user,$pass){//sınıf cağrıldıgında ilk çalışacak metod metodun çağrılmasına gerek yoktur default olarak çalışacaktır
    06     
    07     $username = "bytrislasis"; // Kullanıcı Adımız
    08     $password =  "123456";       // şifremiz
    09     
    10     if (($username == $user)and($password==$pass)) { // Gelen kullanıcı Adı ve Şifre Bizim Belirlediğimize Eşitmi diye bakıyoruz
    11     
    12     $this->kullanici = $user; // Kullanıcı adı Eşit ise gelen degeri kullanıcı özelliğimize atıyoruz
    13     $this->sifre = $pass;     //  şifre adı Eşit ise gelen degeri sifre özelliğimize atıyoruz
    14     
    15     }else {// gelen degerler eşit değilse
    16     echo "Kullanıcı Adınız veya Şifreniz Yalnış<br>";
    17     exit;//Fonksiyonumuzu Burada Durduruyoruz
    18     }
    19     
    20     }
    21     public  function yazdir (){
    22     echo "Kullanıcı Adınız :".$this->kullanici."<br>";
    23     echo "Adınıza Ait Şifre:".$this->sifre."<br>";
    24     }
    25    }
    26     
    27    $yeni = new sinifim("bytrislasis","123456");
    28    $yeni->yazdir();//degerlerimiz doğru ise bu metod çalışacak değilse belirlediğimiz hata blogu gelecektir..
    29    ?>
    Kaynak
  • 15-07-2010, 14:02:04
    #3
    arkadaşlar __destruct Fonksiyonu __construct Fonksiyonun tam tersine sınıfın çağrıldıgında yani başlangıçta değilde sınıftaki işlemler icra edildikten sonra yapılacak işlemi belirtir.. örnek aşşağıdadır..


    01    <?
    02    class sinifim {
    03     public  function yazdir (){
    04     echo "Sınıf Başarıyla Başlatıldı<br>";
    05     }
    06     public function __destruct(){
    07     echo "Sınıftan Cıkılmıştır...<br>";
    08     }
    09    }
    10     
    11    $yeni = new sinifim();
    12    $yeni-> yazdir(); // dikkat ederseniz __destruct metodu kendiliğinden çalışmaktadır..
    13    ?>
    Kaynak
  • 15-07-2010, 14:05:00
    #4
    Parent:: Deyimi
    Kod yazarken ana sınıfların işlev ve değişkenlerini kullanmanız gerekebilir.
    Türetilmiş sınıfınızı temiz tutmak veya ana sınıfın kodunu özelleştirmek istediğiniz durumlar buna birer örnektir.
    ana sınıfın ismini kullanmak yerine, özel parent:: ismini kullanarak sınıfınızın extends yani alt sınıf bildiriminde belirtilen ana sınıfın ismine atıf yapabilirsiniz.
    Böylelikle, ana sınıfın ismini birden fazla yerde kullanmamış olursunuz.
    Kalıtsal ağacınızı gerçeklenimin ileri safhalarında değiştirmek ihtiyacı duyarsanız sınıfınızın sadece extends bildiriminde değişiklik yaparak bunu kolayca yapabilirsiniz.
    Örnek Aşşağıdadır


    01    class sinifim {
    02     public function Welcome (){
    03     echo "Bytrislasis";
    04     }
    05    }
    06    class alt_Sinifim extends sinifim  {
    07     public function Welcome(){
    08     echo "Hoşgeldin ";
    09     parent::Welcome();
    10     
    11     }
    12    }
    13    $yeni = new alt_Sinifim();
    14    $yeni->Welcome();
    15    // çıktısı şu sekilde olacaktır (Hoşgeldin Bytrislasis)
    arkadaşlar dikkat ederseniz bir istisna gibi işlem yaptık ve ana sınıftan Welcome() Metodunu Parent:: Fonksiyonu ile çağırdık diğer çağırma sekline bakalım

    01    class sinifim {
    02     public function Welcome (){
    03     echo "Bytrislasis";
    04     }
    05    }
    06    class alt_Sinifim extends sinifim  {
    07     public function Welcome(){
    08     echo "Hoşgeldin ";
    09     $sinifimdan_gelen = new sinifim();
    10     $sinifimdan_gelen ->Welcome();
    11     
    12     }
    13    }
    14    $yeni = new alt_Sinifim();
    15    $yeni->Welcome();
    16    // çıktısı şu sekilde olacaktır (Hoşgeldin Bytrislasis)
    burada suna dikkat edin

    1    $sinifimdan_gelen = new sinifim();
    2     $sinifimdan_gelen ->Welcome();
    alt sınıfımız içerisinde yeniden o sınıfı çağırdık $this deyimi ilede cağırabilirdik ama Parent:: işimizi kolaylaştırıyor ve ana sınıfımızda değişiklik yapmadan özel tutarak işlemimizi gercekleştiriyor...

    Kaynak
  • 15-07-2010, 14:10:40
    #5
    get_declared_classes fonksiyonu bize (array) yani dizi halinde tanımlı sınıf isimlerini verir bazı yerlerde işinize yarayacağını düşündüğüm için örnek eklemek istedim


    01    <?
    02    class A {
    03    }
    04    class B {
    05    }
    06    class C {
    07    }
    08    class D {
    09    }
    10    print_r(array_reverse(get_declared_classes()));
    11    ?>
    dikkat ederseniz A,B,C,D isimlerinde boş sınıflar oluşturdum bu tanımlanan sınıflarıda gösterir print_r fonksiyonu ile cağırdıgımda

    benim tanımladıgım sınıfları en sonda gösteriyor ama array_reverse() fonksiyonunu kullanarak tersine sıraladım ve sınıflarımı en üstte göstermesini istedim

    çıktısı şu şekilde olacaktır.

    Array
    
    (
    
    [0] => D
    
    [1] => C
    
    [2] => B
    
    [3] => A
    
    [4] => SQLiteException
    
    [5] => SQLiteUnbuffered
    
    [6] => SQLiteResult
    
    [7] => SQLiteDatabase
    
    [8] => SoapHeader
    
    [9] => SoapParam
    
    [10] => SoapFault
    
    [11] => SoapServer
    
    [12] => SoapVar
    
    [13] => SoapClient
    
    [14] => PDORow
    
    [15] => PDOStatement
    
    [16] => PDO
    
    [17] => PDOException
    
    [18] => mysqli_stmt
    
    [19] => mysqli_result
    
    [20] => mysqli_warning
    
    [21] => mysqli
    
    [22] => mysqli_driver
    
    [23] => mysqli_sql_exception
    
    [24] => XMLWriter
    
    [25] => XMLReader
    
    [26] => SplObjectStorage
    
    [27] => UnexpectedValueException
    
    [28] => UnderflowException
    
    [29] => RangeException
    
    [30] => OverflowException
    
    [31] => OutOfBoundsException
    
    [32] => RuntimeException
    
    [33] => OutOfRangeException
    
    [34] => LengthException
    
    [35] => InvalidArgumentException
    
    [36] => DomainException
    
    [37] => BadMethodCallException
    
    [38] => BadFunctionCallException
    
    [39] => LogicException
    
    [40] => SimpleXMLIterator
    
    [41] => SplTempFileObject
    
    [42] => SplFileObject
    
    [43] => RecursiveDirectoryIterator
    
    [44] => DirectoryIterator
    
    [45] => SplFileInfo
    
    [46] => RecursiveArrayIterator
    
    [47] => ArrayIterator
    
    [48] => ArrayObject
    
    [49] => EmptyIterator
    
    [50] => RecursiveRegexIterator
    
    [51] => RegexIterator
    
    [52] => InfiniteIterator
    
    [53] => AppendIterator
    
    [54] => NoRewindIterator
    
    [55] => RecursiveCachingIterator
    
    [56] => CachingIterator
    
    [57] => LimitIterator
    
    [58] => ParentIterator
    
    [59] => RecursiveFilterIterator
    
    [60] => FilterIterator
    
    [61] => IteratorIterator
    
    [62] => RecursiveIteratorIterator
    
    [63] => DOMXPath
    
    [64] => DOMStringExtend
    
    [65] => DOMProcessingInstruction
    
    [66] => DOMEntityReference
    
    [67] => DOMEntity
    
    [68] => DOMNotation
    
    [69] => DOMDocumentType
    
    [70] => DOMCdataSection
    
    [71] => DOMConfiguration
    
    [72] => DOMLocator
    
    [73] => DOMErrorHandler
    
    [74] => DOMDomError
    
    [75] => DOMUserDataHandler
    
    [76] => DOMTypeinfo
    
    [77] => DOMComment
    
    [78] => DOMText
    
    [79] => DOMElement
    
    [80] => DOMAttr
    
    [81] => DOMCharacterData
    
    [82] => DOMNamedNodeMap
    
    [83] => DOMNodeList
    
    [84] => DOMDocument
    
    [85] => DOMDocumentFragment
    
    [86] => DOMNameSpaceNode
    
    [87] => DOMNode
    
    [88] => DOMImplementation
    
    [89] => DOMImplementationSource
    
    [90] => DOMImplementationList
    
    [91] => DOMNameList
    
    [92] => DOMStringList
    
    [93] => DOMException
    
    [94] => SimpleXMLElement
    
    [95] => Directory
    
    [96] => php_user_filter
    
    [97] => __PHP_Incomplete_Class
    
    [98] => LibXMLError
    
    [99] => DateTimeZone
    
    [100] => DateTime
    
    [101] => ReflectionExtension
    
    [102] => ReflectionProperty
    
    [103] => ReflectionObject
    
    [104] => ReflectionClass
    
    [105] => ReflectionMethod
    
    [106] => ReflectionParameter
    
    [107] => ReflectionFunction
    
    [108] => ReflectionFunctionAbstract
    
    [109] => Reflection
    
    [110] => ReflectionException
    
    [111] => dotnet
    
    [112] => com
    
    [113] => variant
    
    [114] => com_safearray_proxy
    
    [115] => com_exception
    
    [116] => COMPersistHelper
    
    [117] => ErrorException
    
    [118] => Exception
    
    [119] => stdClass
    
    )
    Kaynak
  • 15-07-2010, 14:12:15
    #6
    __autoload fonksiyonun bize sağladıgı güzellik class ismini tanıyarak o classın bulundugu dosyayı projemize include etmesidir Dikkat etmemiz gereken husus sınıfımız ismi ile bulundugu dosya ismi aynı olmalıdır örnek aşşağıdadır..


    1    <?php
    2    class index {
    3     var $isim = "ByTrislasis";
    4     public function yaz (){
    5     echo $this->isim;
    6     }
    7    }
    8    ?>
    bu sınıfımızı index.php adında kaydedin dikkat edin class ismimizde index


    01    <?php
    02     
    03    function __autoload($class_name){
    04     include ($class_name.'.php');
    05    }
    06     
    07    $yeni = new index();
    08    $yeni ->yaz();
    09     
    10    ?>
    bu kod bloğunuda herhangi bir isimle kaydedin dikkat ederseniz classın oldugu dosyayı include ettiğini göreceksiniz.

    Kaynak
  • 15-07-2010, 14:25:31
    #7
    arkadaşlar get_class_vars fonksiyonu ile sınıfımızda belirlediğimiz özellikleri özellik adı ve degeri halinde bir dizi'de görebiliriz... örnek aşşağıdadır dikkat ederseniz Private ve Protected olan özellikleri vermemektedir..

    01    <?
    02    class sinifim {
    03     var         $a = "bytrislasis";
    04     public         $b = "phpogreniyorum.com";
    05     private      $c = "Burayı Göstermez çünki Private";
    06     protected     $d = "Burayıda Göstermez çünki Protected";
    07     var         $e = "E özelliği";
    08    }
    09     
    10     print_r(get_class_vars(sinifim));
    11    ?>
    Çıktısı Şu Şekilde Olacaktır.. Array ( [a] => bytrislasis [b] => phpogreniyorum.com [e] => E özelliği )
    Kaynak
  • 15-07-2010, 15:14:15
    #8
    kimi yerde bazen verilerimizi veritabanında değilde herhangi bir dosyada saklayıp daha sonra cağırma gereksinimi duyarız örneğin

    bir post işleminde kullanıcı adı ve şifreyi daha sonra baska bir yerde kullanmak için session cookie kullanabiliriz ama serialize ve unserialize degerleri byte olarak tutar ve daha sonra projemizin herhangi bir yerinde cağırmamız gerekebilir örnek
    not : daha nerelerde kullanıldıgı hakkında bir bilgim yok ama eminimki php bunu yapıyorsa bir bildiği vardır

    //Serialize Etmek (Dosyaya kaydetmek)
    class Deneme {
      public $ad;
      public $soyad;
      public $tc;
    
      public function __construct($ad,$soyad,$tc){
          $this->ad=$ad;
          $this->soyad=$soyad;
          $this->tc=$tc;
      }
    }
    
    $Deneme= new Deneme('Bytrislasis','Sahin','1234567891011');
    touch("kayit.txt");//her ihtimale karsı
    file_put_contents('kayit.txt',serialize($Deneme));
    dosyamızı kaydedin örnek index.php sonra 1 kere çalıştırın
    Buda o Dosyadan tekrar okuma işlemi


    //Unserialize İşlemi
    include("index.php");
    class Deneme {
      public $ad;
      public $soyad;
      public $tc;
    
     
      public function __construct($ad,$soyad,$tc){
          $this->ad=$ad;
          $this->soyad=$soyad;
          $this->tc=$tc;
      }
    }
    
    $Deneme=unserialize(file_get_contents('kayit.txt'));
    
    echo $Deneme->ad;
    ?>
    detaylı kaynak

    zaten acıklama yapılmış

    Bir değerin saklanabilir bir gösterimini üretir.
    PHP değerlerini, yapısını ve türünü kaybetmeden saklamak veya aktarmak için kullanışlıdır.
    Böyle bir değerden tekrar özgün değeri elde etmek için unserialize() işlevini kullanın.

    Kaynak
  • 15-07-2010, 16:41:50
    #9
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Anlatımlar çok güzel olmuş. Anlar gibiyim... Ama 4ever fonksiyonel programlama! Tek sıkıntılı yerim 3. ve 4. örnek arasında fark oldu? Biraz daha açıklayabilir misin orayı?