Webdev del picudo

PHP: POO está en la casa !!! PARTE 2

Deja un comentario

Pues estamos de regreso con respecto a este tema de la programación orientada a objetos. Como les dije este tema es algo extenso puesto que es necesario que veamos ciertas cosas primeramente, como lo es el diagramado de las clases de acuerdo al Lenguaje Unificado de Modelado (UML, por sus siglas en inglés) y antes de poder arrancar, si no han leido la primer parte de este tutorial, les recomiendo que lo hagan y que sigan el ejemplo, pues en dicho archivo vamos a continuar con este tutorial, para dirigirse a la parte 1, haz clic aquí.

Dicho lo anterior, comencemos con el tutorial.

Para ayudarnos a realizar este tutorial, primeramente quisiera explicarles un diagrama de clases muy sencillo:

leclasediagram

Diagrama de clase para LeClase

Primeramente, en el diagrama tenemos en negritas el nombre de la clase, para nombrar las clases es necesario seguir ciertas reglas (no es obligatorio, pueden usar su nomenclatura, pero estas son las mejores prácticas):

  1. La clase siempre debe comenzar en mayúsculas.
  2. Las variables miembro deben de nombrarse de la siguiente manera:
    1. Si es una variable puede nombrarse como sea o bien si es una variable miembro, puede comenzar con m_ .
    2. Si es una constante o una variable setter o getter, es recomendable que se inicie con un guión bajo ( _ ).
    3. Si es una variable parámetro, podemos nombrarla comenzando con p_ .
  3. Los métodos deben de tener un nombre de acuerdo a la funcionalidad que tengan:
    1. Si es el constructor, en PHP se debe usar la palabra __construct, si es en AS3 o en Java, el constructor debe de llamarse exáctamente igual a la clase.

Ahora bien, lo que se debe tomar muy en cuenta es la visibilidad de los métodos y variables. ¿A qué me refiero con esto? Simple, nosotros podemos darle visibilidad a los mismos dependiendo del uso que vayamos a darle en nuestro objeto. Las visibilidades son:

  • PUBLIC (pública, simbología UML -> +): La variable o método son vistos desde cualquier instancia del objeto y puede ser modificada y/o llamada desde cualquier parte del sistema.
  • PRIVATE (privada, simbología UML -> -): La variable o método únicamente son vistos por los métodos dentro de la clase, no pueden ser vistos por las instancias ni por el universo del sistema.
  • PROTECTED (protegida, simbología UML -> #): La variable o método únicamente pueden ser vistos por las clases que extiendan de esta, no puede ser vista por el universo del sistema.

Tomando en cuenta el siguiente diagrama, modifiquemos el código de la clase del tutorial anterior con este código:

<?php
      class LeClase
      {
            private $host;
            private $username;
            private $password;
            private $database;

            public function __construct($host, $username, $password, $database){

            }

            public function connect(){

            }

            public function close(){

            }
      }
?>

Como pueden observar, estamos armando un objeto para conexión a base de datos. Esta es la estructura básica de la misma, pero lo que haremos es emular el comportamiento, puesto que ahorita únicamente estamos viendo lo básico de Winnie POO, sin embargo podemos armar más métodos de acuerdo a las necesidades que tengamos. Vámonos por cada uno de los métodos.

El constructor

Como se los expliqué brevemente, el constructor lo que hace es ejecutarse inmediatamente después de ser invocada una nueva instancia del objeto, por lo que necesitamos ingresarle instrucciones de guardado en las variables privadas. PHP usa el nombre de método __construct para generar este tipo de funciones. Hagamos lo siguiente:

      public function __construct($host, $username, $password, $database){
            $this->host = $host;
            $this->username = $username;
            $this->password = $password;
            $this->database = $database;
      }

Para una clase que funcione como instancia de conexión a base de datos, debemos primeramente guardar en la misma los datos de conexión a la base de datos. El invocar la palabra $this hace que tome del mismo objeto la variable asignada, por lo que para hacer uso de las variables miembro, es necesario usar esta palabra reservada. Con esto guardaremos los datos en la instancia.

La función connect

En la función connect haremos lo siguiente:

      public function connect(){
            echo "Te conectarás a la base de datos {$this->database} alojada en el servidor {$this->host} usando como username {$this->username} y como contraseña {sha1($this->password)}";
      }

En este método estamos emulando la conexión a la base de datos por medio de una línea de salida al navegador.

La función close

En la función close haremos lo siguiente:

      public function close(){
            $this->host = $this->username = $this->password = $this->database = "";
            echo "Variables limpias";
      }

Muy fácil de limpiar y cerrar nuestra conexión, no ???

Pues bien, ya tenemos lista nuestra clase y debería de estar más o menos así:

<?php
      class LeClase
      {
            private $host;
            private $username;
            private $password;
            private $database;
            public function __construct($host, $username, $password, $database){
                  $this->host = $host;
                  $this->username = $username;
                  $this->password = $password;
                  $this->database = $database;
            }
            public function connect(){
                  echo "Te conectarás a la base de datos {$this->database} alojada en el servidor {$this->host} usando como username {$this->username} y como contraseña {sha1($this->password)}<br/>";
            }

            public function close(){
                  $this->host = $this->username = $this->password = $this->database = "";
                  echo "Variables limpias<br/>";
            }
      }
?>

Ahora bien, vamos a implementarla en el index que dejamos también en la parte 1, es muy fácil implementarlo como hacer esto:

<?php
      require("LeClase.class.php");
      $objeto = new LeClase("127.0.0.1","root", "password", "test");
      $objeto->connect();
      $objeto->close();
?>

¿Vieron? Es muy fácil implementar nuestra nueva clase dentro de cualquier script, lo importante es lo siguiente:

  • Es necesario incluir el archivo de la clase que vamos a usar con la instrucción require
  • Para crear una nueva instancia, es necesario usar la instrucción new

Ya para terminar este post, pueden ver que esto lo pueden adaptar a las necesidades que ustedes necesiten, desde hacer queries hasta hacer configuraciones especiales o ¿por qué no? llamar un stored procedure desde web. Estaría ¿no creen? En mi próxima entrega explicaré un poco de herencia y polimorfismo. Espero que les haya gustado este post y si les gusta este blog, difundanlo con sus amigos y/o colegas de profesión, pues nosotros disfrutamos bastante el compartir estas líneas con ustedes.

Saludos y happy coding.

Anuncios

Autor: RZEROSTERN

Solamente soy un desarrollador que se dedica de tiempo completo a armar una que otra pendejada en la web xD. Fan de Phineas y Ferb, del merol y de muchas otras cosas más.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s