2010-08-06 17 views
5

Bir keresinde, statik sınıfların çok zor ve hatta hata ayıklaması imkansız olduğunu okudum. Bu doğru mu ve neden?Bir keresinde, statik sınıfların çok zor ve hatta hata ayıklaması imkansız olduğunu okudum. Bu doğru mu ve neden?

bir örnek yardımcı olacağını, burada ben bir veritabanına erişim için kullandığı bir PHP sınıftır (ben bu sanmıyorum gerçi PHP özgü soru şudur):

<?php 

class DB 
{ 
    private static $instance; 

    private function __construct() { } 

    public static function getInstance() 
    { 
     if(!self::$instance) 
     { 
      self::$instance = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';', DB_USER, DB_PASS); 
     } 
     return self::$instance; 
    } 

    public static function getPreparedStatement($query) 
    { 
     $db = self::getInstance(); 
     return $db->prepare($query); 
    } 

    public static function query($query) 
    { 
     $stmt = self::getPreparedStatement($query); 
     $stmt->execute(); 
    } 

    public static function getResult($query) 
    { 
     $stmt = self::getPreparedStatement($query); 
     $stmt->execute(); 
     return $stmt; 
    } 

    public static function getSingleRow($query) 
    { 
     $stmt = self::getPreparedStatement($query); 
     $stmt->execute(); 
     return $stmt->fetch(); 
    } 

    public static function getMultipleRows($query) 
    { 
     $stmt = self::getPreparedStatement($query); 
     $stmt->execute(); 
     return $stmt->fetchAll(); 
    } 
} 

?> 
+0

Savaş için hazırlandığınızı umuyoruz ... Statik sınıflara/yöntemlere karşı çok fazla nefret var ve bekarları getirdiğinizde daha da kötüleşiyor ... – Nix

+0

Sorun değil :-) konu hakkında merak ediyorum ve insanların sağladıkları cevapları dört gözle bekliyoruz. –

cevap

4

Statik sınıfınız yöntemleri ve verileri olmadığı sürece, yalnızca bir ad alanıdır. Orada sorun yok. Ancak, statik veri verileriniz varsa, genel değişkenler ile aynı sorunları yaşayabilirsiniz: Artık sistemin davranışını yerel bilgilere bakmadan anlayamazsınız. Özellikle çok parçalı bir ortamda, beklenmedik davranışlar ve zor hata ayıklama için olabilirsiniz.

+0

Bu çok mantıklı! –

1

ben düşünüyorum ne Okuduğunuz bu sınıflar ile ilgili idi.

Bu konuda daha iyi bir açıklama ve daha fazlası için, Misco's blogunu okumanızı tavsiye ederim. Onları değerli bir bilgi kaynağı olarak buldum.

Statik yöntemlerle ilgili temel sorun, şeklindedir ve bunlar yordamsal kodlardır. no'lu prosedür prosedür kodunun nasıl test edileceğine dair bir fikrim yok. Birim sınaması, uygulamasının bir parçasını yalıtımına uygulayabileceğimi varsayar. örneğinde, bağımlılıkları gerçek bağımlılıklarının yerine geçen aldatmaca/arkadaşlarla bağlarım. Prosedürel programlaması ile hiçbir nesne olmadığından kodu ve veri ayrı olduğu için “tel” için hiçbir şey yoktur.

+0

Bence statik yöntemlerle alay eden statik sınıflar veya alay sınıfları ile uğraşan iki parçalı bir sorun. Temelde onları arayüzleyemiyorsunuz. – Nix