Curso PHP orientado a objetos – Clases de terceros, encapsulamiento

Una de las grandes ventajas, además de todas las ya explicadas y comentadas, es la facilidad con que se puede encapsular todo, para que en desarrollos posteriores no haya problema alguno. La implementación pasa a un segundo plano y se utiliza como una caja negra que funciona de manera simple. Los atributos: públicos, privados y protegidos; que hemos comentado en un punto anterior, son la base del encapsulamiento.

Imaginad que en una aplicación web, necesitamos generar un fichero PDF o interactuar con el servidor de correo de Gmail o Google Apps. Como es lógico, sería costoso perder tanto tiempo en desarrollar algo de cierta dificultad y que ya existe. La solución, encontrar una clase que se encargue de alguna de estas labores. Quien dice estas dos labores, dice otras muchas, pero he puesto estos dos ejemplos porque he tenido que hacer uso de los mismos hace no mucho.

¿Cómo utilizar dichas clases?

Lo primero es encontrarlas. Por ejemplo, en el caso de interactuar con el servicio de correo de Google tenemos PHP Mailer. Las clases se presentan en ficheros fuente de PHP que deberemos agregar convenientemente a nuestro código con algunas de las instrucciones (elegiremos cada una en función a nuestras necesidades) que mostramos a continuación y que seguro que habéis usado en más de una ocasión:

  • require(ruta_fichero);
  • include(ruta_fichero);
  • require_once(ruta_fichero);
  • include_once(ruta_fichero);

Una vez agregado a nuestro código ya podremos interactuar con ella. Primero la instanciaremos y luego interactuaremos con sus atributos y sus métodos. Con PHPMailer podríamos hacer algo así:

<?php require_once 'class.phpmailer.php'; $correo = new PHPMailer (); $correo->From = "nombre_usuario@gmail.com"; $correo->FromName = "Foo"; $correo->AddAddress ("destinatario@dominio.com"); $correo->Subject = "Mensaje de parte del equipo Linux Hispano"; $correo->Body = "<h3>Enviando con Gmail<h3/>"; $correo->IsHTML (true); $correo->IsSMTP(); $correo->Host = 'ssl://smtp.gmail.com'; $correo->Port = 465; $correo->SMTPAuth = true; $correo->Username = 'nombre_usuario@gmail.com'; $correo->Password = '******'; if(!$correo->Send()) { echo 'Ha ocurrido un error: ' . $mail->ErrorInfo; } else { echo 'Correo enviado con éxito'. } ?> read more

Leer más » 6 Comentarios

Tema Ambiance para Windows 7

Sí, lo sé. No se trata del tema que más me gusta, hablar sobre algo de Windows en Linux Hispano, pero lo que no deja de ser cierto es que la mayoría de nosotros (entre los que me incluyo) tenemos que usar este Sistema Operativo por diversas causas. En mi caso, me he encontrado con este tema para Windows 7 que da una apariencia ubuntera, concretamente el Tema Ambiance. Si bien no deja de ser Windows y tener esa clase de errores que nos ponen negros, mejor que sea con una interfaz sana y agradable. read more

Leer más » 4 Comentarios

Pedir

Leer más » 30 Comentarios

Curso PHP orientado a objetos – Herencia

A través de la herencia, una clase hija hereda de su padre los atributos y métodos, de manera que si por ejemplo tenemos una clase padre “Figura” con un atributo “área”, y dos clases hijas: “Rectángulo” y “Triángulo”.

Árbol de herencia

En PHP la palabra clave para definir la herencia es: “extend” y la forma en que se define es:

  • class Padre
  • class Hija extends Padre

El constructor y los atributos, “base” y “altura” están definidos en la clase “Figura”. El método “área” es propio de cada hija. Veamos la implementación y el resultado:

<?php class Figura { protected $base; protected $altura; function __construct($base, $altura) { $this->base = $base; $this->altura = $altura; } } class Rectangulo extends Figura { function area(){ return $this->base * $this->altura; } } class Triangulo extends Figura { function area(){ return $this->base * $this->altura /2; } } $rectangulo = new Rectangulo(2,2); $triangulo = new Triangulo(2,2); echo "<div>Para base = 2 y altura = 2: <ul> <li>Área para el rectángulo: " . $rectangulo->area() . ">/li> <li>Área para el triángulo: " . $triangulo->area() . "</li> </ul> </div>" ?> read more

Leer más » 5 Comentarios

Lo mejor de mi RSS del 13 al 19 de junio

Leer más » 1 Comentario

El podcast de Linux Hispano – #053 – Richard Stallman

¡Hola a todos!

Acaba de lanzarse el quincuagésimo tercer número de El podcast de Linux Hispano, un podcast sobre Linux y Software Libre.

Tal como lo prometí, en este episodio hablaré sobre la vida y obra de Richard Stallman, fundador de GNU y del movimiento del Software Libre.

GUIÓN:

Richard Stallman: Vida, obra, opinión personal y curiosidades.

ESCUCHA EL PODCAST:  

DESCÁRGATE EL PODCAST: MP3, OGG.

SUSCRÍBETE AL PODCAST: PC, Apple, Android (feed), otro.

Gracias a todos los correos electrónicos que nos habéis enviado, así como los comentarios, lo hemos leído y contestado todos y gracias a ellos nos esforzamos por mejorar. read more

Leer más » 11 Comentarios

Curso PHP orientado a objetos – Sobrecarga

Otro concepto importante de la orientación a objetos es la sobrecarga de funciones. En lenguajes que no permiten la sobrecarga debemos definir dos métodos distintos (con nombre distinto) para poder trabajar con dos funciones que hacen lo mismo, pero reciben distintos tipos de datos. La sobrecarga es muy importante para el constructor ya que normalmente tendremos distintas formas de crear la clase.

En PHP no existen las sobrecargas como tal. Sin embargo, existen mecanismos para imitarla. Como ya he dicho, la sobrecarga es muy importante en el caso del constructor, así que haremos el ejemplo siguiente, sobrecargando esta función.

El mecanismo que seguimos para imitar a la sobrecarga es usar los atributos opcionales. Imaginad que queremos tener dos constructores distintos:

  • Usuario(id, nombre, apellidos, códigoPostal): Recibe los cuatro valores y los inicializa.
  • Usuario(nombre, apellidos, códigoPostal): Recibe los tres valores, los inicializa y el identificador también lo inicializa pero de forma aleatoria (o viendo cuál le corresponde si trabajáramos con una base de datos).

La implementación, sería tal como indicamos a continuación (tenemos que poner el parámetro $id al final para poder jugar con los atributos opcionales):

function __construct($nombre, $apellidos, $codigoPostal, $id = 0)
{
	if($id != 0)
	{
		$this->id = $id;
		$this->nombre = $nombre;
		$this->apellidos = $apellidos;
		$this->codigoPostal = $codigoPostal;
	}
	else
	{
		$this->id = rand(0,100);
		$this->nombre = $nombre;
		$this->apellidos = $apellidos;
		$this->codigoPostal = $codigoPostal;
	}
}

Al poner el identificador al final, igualado a cero en la declaración, lo que le estamos diciendo al compilador es que:

  • Si se llama con tres argumentos, el valor del identificador lo iguale a cero y por lo tanto entre en la parte inferior de la condición, donde se calcula el identificador aleatorio.
  • Si se llama con cuatro argumentos, el identificador tomará el valor que el usuario le pase y por lo tanto funcionará como lo ha hecho hasta ahora.Veamos un par de ejemplos de invocación de este constructor.

$usuario_1 = new Usuario("José", "Gómez Martínez", 14004); $usuario_2 = new Usuario("José", "Gómez Martínez", 14004, 10); read more

Leer más » 11 Comentarios

Tux Info 38: Rooteando Android

Ya podemos descargar el número 38 de la revista Tux Info. Este mes los temas tratados son:

  • Linux Mint 11 a fondo
  • Entrevista a Clement Lefebvre de Linux Mint
  • ¿Es posible vivir en una nube? parte II
  • Presente redefinido
  • Proyecto Infomóvil
  • Backtrack 5 “Revolution”
  • Suplemento TuxMóvil: Todo Motorola Zoom y Atrix
  • Servicio DattaMóvil
  • Actualizando nuestros equipos con Android
  • BabeliumProject.com: práctica oral y colaborativa de idiomas
  • “Publicar la App en el Android Market”
  • read more

    Leer más » 1 Comentario

    Milokoban, juega y descarga su código fuente

    Últimamente llevo insistiendo en la temática de HTML y Javascript. No es para menos, me parecen tecnologías con mucho futuro a pesar de que el lenguaje Javascript tenga mucho que mejorar.

    Debido a mi afán de estas tecnologías, aquí os dejo Milokoban, el típico juego de empujar cajitas. Lo publiqué hace un año tanto en mi web como en Android y pongo a vuestra disposición el código fuente. La licencia es GPLv3. ¡Espero que os guste! 😀

    Juego:

    Código fuente: milokoban.zip.

    Android Market: Milokoban. read more

    Leer más » 7 Comentarios

    Cursos PHP orientado a objetos – Crear una clase (constructor)

    Constructor

    El constructor en PHP se define como se muestra a continuación:

    function __construct($id, $nombre, $apellidos, $codigoPostal){
    	$this->id = $id;
    	$this->nombre = $nombre;
    	$this->apellidos = $apellidos;
    	$this->codigoPostal = $codigoPostal;
    }

    Como podéis apreciar, es una función, con un nombre determinado “__construct” que recibe los parámetros necesarios para la clase y los asigna a los atributos de la clase.

    Creando nuestra primera clase

    Con todo lo que ya hemos explicado, podemos crear un ejemplo completo. Crearemos un par de objetos inicializándolos con unos valores que introduciremos nosotros y luego los mostraremos por pantalla. Para representarlo haremos uso de HTML.

    Si en lugar de incluir nosotros los datos a mano, los incluyéramos a través de, por ejemplo, una conexión con una base de datos MySQL, en la que la clase también apareciera como una tabla, estaríamos creando las bases para una completa aplicación de usuarios con base de datos, que a la vez de fácil de implementar, sería fácil de modificar, mantener y mejorar.

    Crearemos los objetos llamando al constructor, los insertaremos en un array y al final, los mostraremos por pantalla recorriendo el array de objetos que acabamos de crear. Usaremos las funciones de acceso a los atributos, ya que si intentamos acceder directamente a ellos nos devolverá el siguiente error al tratarse de atributos privados: “Fatal error: Cannot access private property Usuario::$id”.

    <?php include("clases.php"); $vector_usuarios = array(); $tmp = new Usuario(1, "José", "Gómez Martínez", 14004); array_push($vector_usuarios, $tmp); $tmp = new Usuario(2, "Javier", "Pérez García", 28080); array_push($vector_usuarios, $tmp); $tmp = new Usuario(3, "Jorge", "Reina Ramírez", 18001); array_push($vector_usuarios, $tmp); echo "<h2>Ejemplo orientaci&oacute;n a objetos con PHP para Linux Hispano</h2>"; foreach($vector_usuarios as $elemento_vector) { echo "<div> <h3>Usuarios sistema</h3> <ul> <li>Id. - " . $elemento_vector->getId() . "</li> <li>Nombre - " . $elemento_vector->getNombre() . "</li> <li>Apellidos - " . $elemento_vector->getApellidos() . "</li> <li>C&oacute;digo postal - " . $elemento_vector->getCodigoPostal() . "</li> </ul> </div>"; } ?> read more

    Leer más » 7 Comentarios