Buscar en la base de conocimientos
< Todos los temas
Imprimir

Ejemplo básico de una clase Singleton en PHP

El patrón Singleton es un patrón de diseño de software que se utiliza para garantizar que una clase tenga una única instancia y proporcionar un punto de acceso global a dicha instancia. En PHP, el patrón Singleton se puede implementar de la siguiente manera:

Crear una clase que tenga un constructor privado. Esto evitará que se puedan crear objetos de la clase desde fuera de la misma.

Crear una propiedad estática que almacenará la única instancia de la clase. Esta propiedad debe ser privada para que sólo se pueda acceder a ella desde dentro de la propia clase.

Crear un método estático que permita obtener la única instancia de la clase. Este método debe comprobar si la instancia ya ha sido creada y, si no es así, crearla y almacenarla en la propiedad estática.

Utilizar la clase a través del método estático que devuelve la única instancia de la misma.

class Conexion {
  // Propiedad estática que almacenará la única instancia de la clase
  private static $instancia = null;

  // Propiedades para almacenar los datos de conexión
  private $servidor = "localhost";
  private $usuario = "usuario";
  private $contrasena = "contraseña";
  private $bd = "basedatos";
  private $conexion;

  // Constructor privado para evitar que se puedan crear objetos de esta clase
  private function __construct() {
    $this->conexion = new mysqli($this->servidor, $this->usuario, $this->contrasena, $this->bd);
  }

  // Método estático para obtener la única instancia de la clase
  public static function getInstancia() {
    if (self::$instancia == null) {
      self::$instancia = new Conexion();
    }
    return self::$instancia;
  }

  // Método para obtener la conexión a la base de datos
  public function getConexion() {
    return $this->conexion;
  }
}

// Se obtiene la instancia de la clase Conexion
$conexion = Conexion::getInstancia();

// Se obtiene la conexión a la base de datos
$mysqli = $conexion->getConexion();

// Se ejecuta una consulta en la base de datos
$resultado = $mysqli->query("SELECT * FROM usuarios");

// Se procesa el resultado de la consulta
while ($fila = $resultado->fetch_assoc()) {
  echo $fila['nombre'] . ' ' . $fila['apellido'] . '<br>';
}

En este ejemplo, la clase Conexion es una clase Singleton que se utiliza para obtener una única instancia de la conexión a la base de datos. La propiedad estática $instancia almacena la única instancia de la clase, y el constructor es privado para evitar que se puedan crear objetos de esta clase desde fuera de la misma. El método estático getInstancia es el encargado de crear la única instancia de la clase si aún no existe, y devolverla. El método getConexion devuelve la conexión a la base de datos, que se utiliza para ejecutar una consulta y procesar los resultados.

Es importante destacar que este es un ejemplo muy básico y que hay muchas formas de implementar una clase Singleton en PHP.

Es importante tener en cuenta que el patrón Singleton puede tener algunas desventajas, como dificultades para realizar pruebas unitarias o problemas de concurrencia en entornos multi-hilo. Por tanto, debe ser utilizado con precaución y sólo cuando sea necesario.

Sidebar