5

He estado leyendo al respecto pero no logro saber cuando usar uno o el otro.

Veo que el new mysqli se usa orientado a objetos y el mysqli_connect orientado a procedimientos pero es algo que no comprendo.

En esta doc: mysqli::__construct -- mysqli_connect, no explica mucho para un amateur.

¿Podría alguien instruirme?

A. Cedano
  • 86,578
  • 19
  • 122
  • 221
Daniel
  • 409
  • 1
  • 8
  • 17

1 Answers1

10

En realidad se trata de dos estilos de programación, uno es el llamado estilo procedural o procedimental (más antiguo, si se quiere), y el otro es el estilo orientado a objetos.

Respondiendo a lo que parece ser tu duda principal, ya que lo has escrito en negritas:

no logro saber cuando usar uno o el otro

La respuesta del Manual de PHP es la siguiente:

Mezclar estilos

Es posible cambiar entre los estilos en cualquier momento. No se recomienda mezclar los dos estilos por razones de claridad y estilo de código.

* Manual de PHP (ver enlace al final)

El Manual de PHP también explica que la extensión mysqli ofrece una interfaz dual. Soporta el paradigma de programación procedimental y el orientado a objetos. Dando detalles sobre en qué consiste cada uno:

La interfaz procedimental

Los usuarios que migren desde la extensión mysql antigua pueden preferir la interfaz procedimental. Esta interfaz es similar a la de la extensión antigua de mysql. En la mayoría de los casos, los nombres de funciones difieren únicamente por el prefijo. Algunas funciones de mysqli toman como primer argumento un gestor de conexión, mientras que las funciones similares de la antigua interfaz de mysql lo toman como el último argumento opcional.

La interfaz orientada a objetos

Además de la clásica interfaz procedimental, los usuarios pueden optar por usar la interfaz orientada a objetos. La documentación está organizada según la interfaz orientada a objetos. Esta interfaz muestra las funciones agrupadas por su propósito, haciendo más fácil los comienzos. La sección de referencia proporciona ejemplos para ambas variantes de sintaxis.

* Manual de PHP

Con respecto a dudas planteadas en diversos foros y posibles mitos que puedan crearse sobre el rendimiento de usar un estilo u otro, el Manual dice lo siguiente:

No existen diferencias significativas de rendimiento entre las dos interfaces. Los usuarios pueden basar su elección en sus preferencias personales.

* Manual de PHP

Una pregunta que surgirá, casi seguro ...

Aclarado eso, intuyo que surgirá otra pregunta: ¿Por cuál decidirse?

En efecto, no se trata de saber cuándo usar uno u otro (ya que no se recomienda mezclar estilos), sino de decidirte por uno o por otro. Yo te recomendaría, sin temor alguna a equivocarme, que uses el estilo orientado a objetos.

Entre sus principales ventajas tenemos:

  • Reutilización de código: por ejemplo, podrías tener una clase dedicada a manejar tus conexiones a la base de datos y los diferentes métodos de consulta y presentación de los datos obtenidos, etc. Esa misma clase la podrías usar en más de un proyecto. En el estilo procedural la reutilización de código no es del todo imposible, pero es parcial y complicado.

  • Más fácil de mantener: una ventaja que tiene que ver con la anterior. Al tener tu código en un solo lugar y reutilizarlo, cualquier aplicación que desarrolles será más fácil de mantener. Esto no tiene tanta importancia en proyectos pequeños, pero en proyectos grandes, cuando usas la programación procedural y hay que cambiar o corregir algo, tendrás un gran dolor de cabeza. Imaginemos algo tan sencillo y frecuente como que cambies la contraseña de acceso a la base de datos. Si en tu aplicación tienes por todas partes código de conexión a la base de datos tendrás que buscar uno por uno para cambiar la contraseña. En cambio, si tienes una clase de conexión que usas cada vez que la necesites creando instancias de la misma mediante new, solo tendrías que hacer el cambio una vez, en la clase o en el archivo que esta usa para leer la contraseña.

  • Modularidad: También útil en proyectos grandes. Y una de las tendencias hacia las que apunta la programación moderna. Facilita también el trabajo en equipo.

  • Programación real: (Esto es un apunte mío). La programación orientada a objetos acerca lo que programamos a la realidad. En ella tendrías Clases que representarían en una aplicación cualquiera, entidades de la vida real. Así, una clase llamada Persona tendría todos los atributos de una persona: Nombre, Apellidos, Sexo, Fecha de Nacimiento, etc. Una clase Caballo tendría los atributos de un Caballo y extendería de la clase Animal. Usando la POO programas pensando en la realidad, lo cual es una enorme ventaja.

Hay otras ventajas, las cuales mencionaré, aunque puedan parecerte términos complicados si estás empezando. Seguro escucharás hablar de ello y terminarás poniéndolo en práctica cuando avances en el tema: encapsulación, abstracción, herencia, poliformismo.

Esta y otras ventajas ofrece la programación orientada a objetos.

Otra posibilidad con respecto al manejo de la base de datos

Si te decides por usar MySQLi, recomendaría usar el estilo orientado a objetos. Aunque yo en lo particular, para manejos de Base de Datos prefiero la clase PDO, porque es más poderoso y permite operar con más simplicidad sobre los datos.


(*) Para más detalles y ejemplos de ambos estilos con código, puedes consultar la sección Interfaz dual: procedimental y orientada a objetos en el Manual de PHP, de la cual he tomado varios elementos para responder a tu pregunta.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221