2010-08-06 9 views
5

Una vez leí que las clases estáticas son muy difíciles e incluso imposibles de depurar. esto es verdad y porqué?Una vez leí que las clases estáticas son muy difíciles e incluso imposibles de depurar. esto es verdad y porqué?

Si un ejemplo ayudaría, aquí es una clase PHP que utilizo para acceder a una base de datos (no creo que esto es una pregunta-PHP específica, sin embargo):

<?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

Espero que estés preparado para una guerra ... hay un montón de odio hacia las clases/métodos estáticos, y se pone peor cuando traes los singletons ... – Nix

+0

Está bien :-) Tengo curiosidad sobre el tema y esperamos las respuestas que la gente brinda. –

Respuesta

4

Siempre que su clase estática tenga métodos y no tenga datos, solo se trata de un espacio de nombres. No hay problema allí. Pero si tiene datos estáticos, se encuentra con los mismos problemas que las variables globales: ya no puede entender el comportamiento del sistema al mirar la información local. Particularmente en un entorno de subprocesos múltiples, podría tener un comportamiento inesperado y una depuración difícil.

+0

¡Eso tiene mucho sentido! –

1

Me gustaría pensar que lo leyó estaba relacionado con probando esas clases.

Para una buena explicación en profundidad sobre esto y mucho más, le sugiero que lea Misco's blog. He encontrado que son una valiosa fuente de información.

El problema básico con los métodos estáticos es son código de procedimiento. No tengo idea de cómo probar el código de procedimiento de la unidad. La prueba de la unidad asume que puedo crear una instancia de una aplicación de mi aplicación de forma aislada. Durante la creación de instancias cableo las dependencias con mocks/friendlies que reemplazan las dependencias reales . Con la programación de procedimiento no hay nada que "cablee" ya que no hay objetos, el código y los datos están separados.

+0

Creo que es una cuestión de dos partes que trata sobre burlas de clases estáticas o clases de burla que tienen métodos estáticos. Principalmente porque no puedes interactuar con ellos. – Nix

Cuestiones relacionadas