2012-01-02 26 views
7

Soy un principiante en la programación de PHP y me gustaría ayudar con una pequeña pregunta. Por favor, eche un vistazo al siguiente código:PHP OOP Programación MySQL


Código PHP

<?php 
class Account 
{ 
    public function register() 
    { 
    $db_link = mysql_connect("localhost","root",""); // Create Connection 
    if (!$db_link) // Check connection 
    { 
     die(mysql_error()); 
    } 

    mysql_close($db_link); // Close Connection 
    } 

    public function login() 
    { 
    $con = mysql_connect("localhost","root","") // create connection 
    if (!$con) // create connection 
    { 
     die(mysql_error()); 
    } 
    mysql_close($con); //close connection 
    } 

} 
?> 

Mi pregunta es si la creación de enlaces db individuales para cada uno de los métodos del objeto es la mejor manera ¿ir? ¿Hay una forma mejor o alternativa de hacer esto? Espero haberlo explicado lo suficiente.


¿Sería correcto lo siguiente?

$x = new Account("localhost", "root", ""); 

-yx tendría su propia conexión ... y luego se cierra cuando está hecho?

+2

sólo tiene que utilizar 'mysql_connect()' y 'mysql_close()' al principio y al final de todo el programa. No es necesario crear una instancia de conexión en cada método. –

+0

@ldiqual: ¡tu comentario podría ser una respuesta! –

+4

@idiqual No debería alentar el uso de 'mysql_' en absoluto, especialmente para alguien que acaba de ingresar al idioma y está comenzando un nuevo proyecto. – cspray

Respuesta

9

No aconsejaría crear sus conexiones de base de datos de esta manera. Crea una conexión e inyecta eso en el objeto que lo usa. No debería necesitar crear una nueva conexión para cada objeto.

Código ejemplo:

$connection = new mysqli('localhost', 'user', 'password'); 

$Account = new Account($connection); 

tendría que cambiar para parecerse Account:

class Account { 

    protected $connection; 

    public function __construct(mysqli $connection) { 
     $this->connection = $connection; 
    } 

    public function register() { 
     // use $this->connection for db 
    } 

    public function login() { 
     // use $this->connection for db 
    } 

} 

También sugeriría que tome un vistazo a la php.net docs about choosing a MySQL API. Si realmente desea utilizar OOP con PHP y MySQL necesitará cambiar a mysqli o PDO ya que la API que está utilizando no es realmente compatible con una interfaz OOP.

+0

Olvidó cerrar la conexión. –

+4

@GabrielSantos No, no lo cerré a propósito. ¿Qué pasa si hay otro objeto que necesita usar esa conexión? Entonces tenemos que abrir la conexión nuevamente. El código que creó el objeto de conexión debería ser responsable de cerrar la conexión. – cspray

+0

+1 para esta observación. –

-1

Puede usar un miembro estático y todos sus objetos compartirán una conexión de base de datos.

Ver también PHP - a DB abstraction layer use static class vs singleton object?

+1

No usaría ninguno (clase estática o singleton). – PeeHaa

+1

Válido para singleton. No hay razón para introducir una conexión de base de datos en el ámbito global con static – cspray

+0

@CharlesSprayberry De acuerdo nuevamente. –

-1

Si quisiera reducir su tamaño y mantenerlo más limpio/más manejable que podría poner el mysql conectar código en su propio método y llamarlo así:

<?php 
class Account 
{ 
    private $connection; 

    private function connect() 
    { 
    $this->$connection = mysql_connect("localhost","root",""); // Create Connection 
    } 

    public function register() 
    { 
    $this->connect(); 
    if (!$this->$connection) // Check connection 
    { 
     die(mysql_error()); 
    } 

    mysql_close($this->$connection); // Close Connection 
    } 

    public function login() 
    { 
    $this->connect(); 
    if (!$this->$connection) // create connection 
    { 
     die(mysql_error()); 
    } 
    mysql_close($this->$connection); //close connection 
    } 

} 
?> 
+1

Downvoted porque, en última instancia, sigue creando la conexión de la base de datos cada vez que se llama a una función. – cspray

+0

@CharlesSprayberry De acuerdo con usted. –

+0

@CharlesSprayberry Interpreté erróneamente la pregunta original –

0

Usted puede utilizar algunos códigos como como:

$db_link = mysql_connect("localhost","root",""); // Create Connection 
if (!$db_link) // Check connection 
{ 
    die(mysql_error()); 
} 
mysql_select_db("db_name"); 
$q=mysql_query("SELECET * FROM table_name LIMIT 1"); 

Otras búsquedas estarían aquí

mysql_close($db_link); // Close Connection 

Crear una sola conexión en cada página es suficiente. más de una conexión o desconectarse del servidor SQL e iniciar sesión de nuevo puede causar un rendimiento reducido.

3

sugiero:

public function __construct(mysqli $connection) { 
    $this->connection = $connection; 
    if(!$this->$connection) { 
     die(mysql_error()); 
    } 
} 

public function __destruct() { 
    mysql_close($this->$connection); 
} 
+0

No estoy seguro de que recomiende usar morir en esta (u otra OO) situación. – cmbuckley

+0

@cbuckley Solo para fines de muestra. –

+0

Mi única preocupación era que podría ser un mal ejemplo establecer un programador PHP principiante, OOP u otro. – cmbuckley