• 05-07-2014, 04:12:46
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Arkadaşlar merhaba.

    Kafama takılan bir durum oldu, araştırdım ama istediğim gibi bir kaynağa ulaşamadım ne yazık ki. Şimdi sorun şu:

    Static, singleton yapıda bir class yazdım. Bu classı şöyle kullanabiliyorum.

    db::select('id, title, content');
    db::from('news');
    db::orderBy('id', 'desc');
    $result = db::getAll();
    var_dump($result);
    şimdi buraya kadar sorunum yok. Bu kodlama çalışıyor sistem. Ama ben şöyle bir yapı kullanmak istiyorum:

    db::select('id, title, content')->from('news')->orderBy('id', 'desc')->getAll();
    Normal de object bir sınıf olsa, metotların içerisine return $this; yazarak zincirlemeyi sağlayabilirim ama, static olunca sağlayamadım ne yazık ki. Mesela laravel'de bu tarz bir kullanım mevcut. Acaba nasıl yapıldığı hakkında bilgisi olan var mı?

    Yardımcı olabilirseniz çok sevinirim.
  • 05-07-2014, 11:54:11
    #2
    static metod tanımlanan fonksiyonlarda $this->X yerine self::$X kullanabilirsiniz.
  • 05-07-2014, 14:49:57
    #3
    ylv
    Üyeliği durduruldu
    _BuKi_ adlı üyeden alıntı: mesajı görüntüle
    Arkadaşlar merhaba.

    Kafama takılan bir durum oldu, araştırdım ama istediğim gibi bir kaynağa ulaşamadım ne yazık ki. Şimdi sorun şu:

    Static, singleton yapıda bir class yazdım. Bu classı şöyle kullanabiliyorum.

    db::select('id, title, content');
    db::from('news');
    db::orderBy('id', 'desc');
    $result = db::getAll();
    var_dump($result);
    şimdi buraya kadar sorunum yok. Bu kodlama çalışıyor sistem. Ama ben şöyle bir yapı kullanmak istiyorum:

    db::select('id, title, content')->from('news')->orderBy('id', 'desc')->getAll();
    Normal de object bir sınıf olsa, metotların içerisine return $this; yazarak zincirlemeyi sağlayabilirim ama, static olunca sağlayamadım ne yazık ki. Mesela laravel'de bu tarz bir kullanım mevcut. Acaba nasıl yapıldığı hakkında bilgisi olan var mı?

    Yardımcı olabilirseniz çok sevinirim.
    merhaba,

    laravel kodlarını görmedim, yapısını bilmiyorum.

    db::select('id, title, content')->from('news')->orderBy('id', 'desc')->getAll();

    static class yapısında has a olarak çalışan sorgu oluşturmaya yarayan yardımcı bir class daha mevcut gözüküyor. getAll() methodu ile execute yapıldığı zaman kendini yeniliyor olması gerek. has a class statik olmadığı için çok daha verimli olucaktır.

    yapılmış olan tahminen,
    $query = new sqlQuery;
    $query->select(...)->from->(...)->...;
    $result = DB::execute($query);

    sizin duruk yöntemlerle yaptığınız
    db::select('id, title, content');
    db::from('news');
    db::orderBy('id', 'desc');
    $result = db::getAll();
    bu uygulama sağlıklı olmaz, veriler sürekli değişecek, sürekli verileri sıfırlamanız gerekecek.
  • 05-07-2014, 17:29:51
    #4
    Verileri sürekli sıfırlıyorum zaten her sorgu çalıştırılmasından önce hocam. O konuda sorun yok. Şu an class ilk dediğin yöntem gibi çalışıyor ama böyle kullanmak benim pratiğime gelmiyor. İkinci yöntem daha iyi ve hızlı kod yazdırıyor. Bu nedenle onu kullanmak istiyordum.

    Dün baya araştırdım ve sorunu çözdüm zaten. object yöntemlerde metotların sonuna return $this; yazıyoruz, staticlerde ise zincirleme için return new self; yazmak gerekiyormuş. Bunu yapınca sorunumu çözdüm, şimid ikinci verdiğim örnekteki gibi yani istediğim gibi kullanabiliyorum
  • 06-07-2014, 12:25:30
    #5
    ylv
    Üyeliği durduruldu
    _BuKi_ adlı üyeden alıntı: mesajı görüntüle
    Verileri sürekli sıfırlıyorum zaten her sorgu çalıştırılmasından önce hocam. O konuda sorun yok. Şu an class ilk dediğin yöntem gibi çalışıyor ama böyle kullanmak benim pratiğime gelmiyor. İkinci yöntem daha iyi ve hızlı kod yazdırıyor. Bu nedenle onu kullanmak istiyordum.

    Dün baya araştırdım ve sorunu çözdüm zaten. object yöntemlerde metotların sonuna return $this; yazıyoruz, staticlerde ise zincirleme için return new self; yazmak gerekiyormuş. Bunu yapınca sorunumu çözdüm, şimid ikinci verdiğim örnekteki gibi yani istediğim gibi kullanabiliyorum
    static classlarda zincirleme olayını ilk sizden duydum,
    "return new self;" test ettiniz mi bu yapıyı? php yeni versiyonlarında çıkmış bir durum mu?
    ben sadece türetilmiş sınıf ile temel sınıf arasında aynı methodları ayırmak için new self() yazımını biliyorum.
  • 06-07-2014, 12:38:17
    #6
    Üyeliği durduruldu
    hocam olay basit aslında

    dizilim şu şekilde olmalı

    obje objeye ait method sonra tekrar objeye ait method şeklinde gidiyor sonrada bir toplayıcı method hepsini topluyor da ben şimdi bunu böyle anlatamadım basit bir örnek koyalım.

    <?php
    class Sinif
    {
        private $str;
        function __construct(){
            $this->yazi = "";
        }
    
        function yaziA(){
            $this->yazi .= "r10";
            return $this;
        }
    
        function yaziB(){
            $this->yazi .= "net";
            return $this;
        }
    
        function yazilarigetir(){
            return $this->yazi;
        }
    }
    
    
    $sinif = new Sinif();
    
    echo $sinif->yaziA()->yaziB()->yazilarigetir();
  • 06-07-2014, 17:46:27
    #7
    ylv adlı üyeden alıntı: mesajı görüntüle
    static classlarda zincirleme olayını ilk sizden duydum,
    "return new self;" test ettiniz mi bu yapıyı? php yeni versiyonlarında çıkmış bir durum mu?
    ben sadece türetilmiş sınıf ile temel sınıf arasında aynı methodları ayırmak için new self() yazımını biliyorum.
    php 5.4.16 versiyonunu kullanıyorum. muhtemelen 5.3'den sonra falan gelmiş olabilir özellik. Dediğim gibi şu an da popüler olan çoğu framework'de bu tarz kullanımlar mevcut. Ki benim büyük heves ve ilgiyle takip ettiğim, çalıştığım framework olan Laravel'de de bu yapı mevcut. View::make('post.show')->with('post', $post); veya DB::table('uyeler')->update(array('votes' => 1)); gibi mesela. Bu açıdan bir araştırmaya girmiştim ve return new self; komutu ile dediğimi yaptım. Bu return $₺his ile aynı şeyi yapıyor sanırım static metotlar için.

    mka688 adlı üyeden alıntı: mesajı görüntüle
    hocam olay basit aslında

    dizilim şu şekilde olmalı

    obje objeye ait method sonra tekrar objeye ait method şeklinde gidiyor sonrada bir toplayıcı method hepsini topluyor da ben şimdi bunu böyle anlatamadım basit bir örnek koyalım.

    <?php
    class Sinif
    {
        private $str;
        function __construct(){
            $this->yazi = "";
        }
    
        function yaziA(){
            $this->yazi .= "r10";
            return $this;
        }
    
        function yaziB(){
            $this->yazi .= "net";
            return $this;
        }
    
        function yazilarigetir(){
            return $this->yazi;
        }
    }
    
    
    $sinif = new Sinif();
    
    echo $sinif->yaziA()->yaziB()->yazilarigetir();
    Hocam bu şekilde zaten kullanabiliyorum burda problem yok. Ama burda kullanabilmeniz için dahil ettiğiniz sınıfı new etmeniz gerek. Static sınıflarda böyle bir duruma gerek kalmıyor. Dikkat ederseniz benim verdiğim örnekte db::select('id, title, content')->from('news')->orderBy('id', 'desc')->getAll(); şeklinde bir kullanım var. $db->select()->from()->.... diye değil. Ama yukarda söylediğim gibi sorunu hallettim.

    İlginiz için teşekkürler, lazım olan olursa böyle bişey, bunu kullanabilir
  • 06-07-2014, 19:49:48
    #8
    Kimlik doğrulama veya yönetimden onay bekliyor.
    <?php
    
    class test
    {
       public function a()
       {
           return new static();
       }
    
       public function b()
       {
          return 'hello';
       }
    }
    
    echo test::a()->b(); // hello
  • 06-07-2014, 20:23:34
    #9
    saintx adlı üyeden alıntı: mesajı görüntüle
    <?php
    
    class test
    {
       public function a()
       {
           return new static();
       }
    
       public function b()
       {
          return 'hello';
       }
    }
    
    echo test::a()->b(); // hello
    return new self; ile return new static(); arasında ciddi bi' fark var mı ?