Opinión sobre el código de la clase conexión

Estado
No está abierto para más respuestas.
Mensajes
4
Puntuación de reacción
0
Hola a todos, este es mi segundo tema, estoy tratando de hacer una clase para la conexión con mysqli orientado a objetos, este es el código que estoy utilizando, me gustaria que me dijieran como voy, si tengo que colocarle constructores? tambén he leido que algunos le colocan el método destructor?
PHP:
<?php
	
	Class Conexion{

		private $server='localhost';
		private $usuario='root';
		private $pass='';
		private $mainDataBase='ejemplo';


	  	   /*Realiza la conexión a la base de datos.*/
	   public function conectar(){
	      $link=new mysqli($this->server, $this->usuario, $this->pass,$this->mainDataBase);

	     //  //Si sucede algún error la función muere e imprimir el error
        if($link->connect_error){
            die("Error en la conexion : ".$link->connect_errno."-".$link->connect_error);
        }

		//evitando problemas con acentos
		$link->query("SET NAMES 'utf8'");
		
		return $link;
		}
	   
	}

?>
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
Yo olvidar'ia MySQLi PHP: The Right Way y sobre el constructor pues sí, para inicializar el objeto y pasarle las variables que necesita, ej: $dbh = new Conexion($host, $dbUser, $dbPassword, $dbName); y el método __destructor úsalo si te sirve de algo, ej mysql_close(),
 

Julio Rodríguez

Diamante
Usuario de Bronce
Mensajes
2,520
Puntuación de reacción
2
¿porque olvidar mysqli? recuerda cerrar la conexión al terminar el documento!!
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
¿porque olvidar mysqli? recuerda cerrar la conexión al terminar el documento!!

Me uno a la pregunta @lobogris

Bueno, me precipité en escribir la respuesta y no dar razonamientos. En mi opinión prefiero utilizar PDO por:

- Más fácil/sencillo de usar
- 100% POO (aunque también está la clase mysqli, pero no es tan 'bonita')
- Si cambias de base de datos, generalmente, sólo tienes que cambiar el driver
- Object Mapping
- Parámetros nombrados
 
Mensajes
4
Puntuación de reacción
0
Hola chicos gracias por responderme, tomare en cuenta la extensión PDO si he visto ejemplo pero como tenia conocimiento de mysqli quise empezar por allí.

Yo olvidar'ia MySQLi PHP: The Right Way y sobre el constructor pues sí, para inicializar el objeto y pasarle las variables que necesita, ej: $dbh = new Conexion($host, $dbUser, $dbPassword, $dbName); y el método __destructor úsalo si te sirve de algo, ej mysql_close(),

haciendo el constructor quedaria así la clase, le agregue la variable link para que después utilizarla en el método __destruct:
PHP:
Class Conexion{

		private $server;
		private $usuario;
		private $pass;
		private $mainDataBase;
		private $link;

		//constructor de la clase
		public function __construct($server='localhost',$usuario='u326427415_root',$pass='123456',$mainDataBase='u326427415_siste')
		{
			$this->server=$server;
			$this->usuario=$usuario;
			$this->pass=$pass;
			$this->mainDataBase=$mainDataBase;
			$this->link=self::conectar();
		}
	  	   /*Realiza la conexión a la base de datos.*/
	   public function conectar(){
	      $link=new mysqli($this->server, $this->usuario, $this->pass,$this->mainDataBase);

	     //  //Si sucede algún error la función muere e imprimir el error
        if($link->connect_error){
            die("Error en la conexion : ".$link->connect_errno."-".$link->connect_error);
        }

		//evitando problemas con acentos
		$link->query("SET NAMES 'utf8'");
		
		return $link;
		}
	   public function __destruct() 
	   {
	   		$this->link->close();
	   }
	}
Ahora como ven el código que le agregue esos dos métodos? para llamarlo en una clase ejemplo usuario hago esto:
PHP:
$db=new Conexion();
$link=$db->conectar();
$consulta=$link->prepare();....

Ahora como hago para llamar el método __destruct desde ejemplo la clase Usuario para que me cierre la conexión al terminar el documento? No me gustaria que el usuario pueda modificar los datos de los datos de la conexión, es decir, las variables, localhost, root.. como podria evitar eso?

Saludos.
 
Estado
No está abierto para más respuestas.
Arriba