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

Controlar ventilador en Ubuntu

Últimamente venía notando que mi equipo no dejaba de usar los ventiladores aunque pensara que no estaba haciendo un uso excesivo de la CPU como para que requiera mejor ventilación. Así pues, me doy cuenta de que el sensor de los ventiladores no es detectado y que siempre están al 100%.

Para algunos estos puede ser una ventaja, pero esta claro que en el día en que vivimos y con la de avances tecnológicos que tenemos, usar un dispositivo sin control mientras que sí podemos controlarlo puede parecer absurdo, de hecho lo es. El ventilador debe de ser controlado en función del nivel de temperatura de nuestro equipo. read more

Leer más » 14 Comentarios

Cursos PHP orientado a objetos – Crear una clase (atributos y propiedades)

Lo primero que haremos será declarar la clase con sus atributos en PHP. La operación es muy similar a la declaración de un struct en C o de otro elemento similar en otro lenguaje.

Comenzaremos definiendo los atributos. Delante de cada uno indicamos el tipo de atributo del que se trata (público, privado o protegido). Si no indicamos nada, el atributo será considerado público (además, es posible que nos lance algún tipo de advertencia el intérprete de PHP).

¿Qué es eso de público, privado y protegido?

  • Público (public): Se puede acceder desde fuera de la clase.
  • Privado (private): Sólo se puede acceder desde dentro de la clase.
  • Protegido (protected): Se puede accede desde dentro de la clase y desde clases herederas.

Como éste es un artículo de introducción a la programación orientada a objetos con PHP no voy a centrarme demasiado en definir estos términos, ni otros relacionados como la herencia o el polimorfismo.

Pasemos a implementar ya la creación de nuestra clase usuario siguiendo el diseño propuesto en el punto anterior.

class Usuario{
	private $id;
	private $nombre;
	private $apellidos;
	private $codigoPostal;
}

Pero si son privados, ¿cómo accedemos a los atributos? La solución es crear métodos, funciones propias de la clase, pública que accedan al atributo.

¿Qué ventajas tenemos con esta metodología? Aunque en este caso el acceso va a ser directo, en casos donde haya que realizar una comprobación, nos aseguramos que los objetos de la clase siempre tienen datos válidos, además de ocultar la implementación interna de la clase, creando una caja negra mucho más útil en grandes proyectos. Por ejemplo, un método “setNIF” en el que antes de igualar el atributo al valor enviado por el usuario, se compruebe si la letra del NIF es válida, y en caso de no serlo, no se almacene el nuevo valor.

Veamos la implementación de esos métodos dentro de la clase.

function getId(){ return $this->id; } function setId($id){ $this->id = $id; } function getNombre(){ return $this->nombre; } function setNombre($nombre){ $this->nombre = $nombre; } function getApellidos(){ return $this->apellidos; } function setApellidos($apellidos){ $this->apellidos = $apellidos; } function getCodigoPostal(){ return $this->codigoPostal; } function setCodigoPostal($codigoPostal){ $this->codigoPostal = $codigoPostal; } read more

Leer más » 4 Comentarios

Buscar archivos grandes en Linux

Con una simple consulta con el comando find y haciendo un pipe de la salida a awk para formatearla con el nombre de fichero (ruta) y el tamaño obtengo los archivos del sistema (/) con un tamaño superior a 100 MB.

Lanzándolo como superusuario habilitamos la búsqueda para rastrear sobre rutas en las que no tenemos los permisos suficientes con un usuario común. Así:

ahornero@6581-D:~$ sudo find / -type f -size +100000k -exec ls -lh {} \; | awk ‘{ print $8 “: ” $5 }’

Y la salida obtenida, tiene en mi caso, la siguiente forma: read more

Leer más » 4 Comentarios

Lo mejor de mi RSS del 6 al 12 de junio

Leer más » 1 Comentario

Curso PHP orientado a objetos – Introducción

Aunque PHP nació como un lenguaje orientado a la programación procedimental, con el tiempo se fue adaptando a las necesidades de los desarrolladores y comenzó a añadir características propias de los lenguajes orientados a objetos.

Esta es la primera entrada de un mini curso de varias entregas en el que trataremos de explicaros cómo usar los mecanismos propios de la orientación a objetos en este lenguaje tan popular del lado del servidor.

Clases, atributos y operaciones

Simplificando mucho, una clase es la representación software de un elemento de la vida real. Si para un determinado problema, que es el que vamos a utilizar, nos importan los usuarios, tendremos la clase “usuario”. La representación software serán los datos y el comportamiento del mismo que nos importe de cara a nuestro sistema. Imaginemos un sencillo sistema de gestión de usuarios que almacene los siguientes datos: read more

Leer más » 2 Comentarios

Eliminar un enlace simbólico

No sé si será vuestro caso, pero yo los uso día a día y me ayudan a no tener que recordar todas las rutas dónde accedo. Los enlaces simbólicos son un enlace a un fichero o directorio que se encuentra en una ruta diferente dentro de la estructura de directorios.

Existe otro tipo de enlace en los sistemas UNIX, el enlace duro o hard link, en donde el acceso es indistinguible del acceso real, y el borrado del mismo elimina su origen.

Personalmente, prefiero los enlaces simbólicos, básicamente por dos motivos: Es posible realizar enlaces simbólicos para apuntar a objetos que se encuentran en otros dispositivos o particiones; y que cualquier usuario puede crear un enlaces simbólicos. read more

Leer más » 3 Comentarios

Enviar correos con C# usando Mono

Si necesitáis conectaros a un servidor SMTP para hacer envíos de correos desde una aplicación que corre Mono, os dejo el código siguiente que seguro que os es de utilidad. Este ejemplo en concreto envía un mensaje usando un SMTP que requiere autenticación, si necesitáis alguna variantes: varios destinatarios, SMTP sin autenticación o cualquier otra cosa, ¡preguntad en los comentarios!

public static void Main (string[] args) { MailAddress para = new MailAddress("para@direccion.com"); MailAddress desde = new MailAddress("desde@direccion"); MailMessage mensaje = new MailMessage(desde, para); mensaje.Subject = "Asunto"; mensaje.Body = @"Cuerpo del correo"; SmtpClient cliente = new SmtpClient("direccion_servidor", puerto); cliente.Credentials = new System.Net.NetworkCredential ("nombre_usuario", "contraseña_usuario"); Console.WriteLine("Enviando mensaje de correo para: " + para.User + " en " + para.Host + " usando el servidor=" + cliente.Host + "."); try { cliente.Send(mensaje); Console.WriteLine("Mensaje enviado"); } catch (Exception ex) { Console.WriteLine("Problemas enviando mensaje: " + ex.ToString()); } } read more

Leer más » 5 Comentarios

Instalar RawTherapee en Ubuntu

Ya habéis visto que muchas de mis entradas están dedicadas a la fotografía y a comparativas de procesado de imágenes sobre sobre Linux (parte 1 y parte2). Hace un par de meses os hable de Raw Studio 2, una aplicación de revelado, la que había usado hasta ahora.

Logo de RawTherapee

Bien, digamos que además de estudiar alternativas, me gusta compararlas personalmente. Así, desde hace tiempo, he estado usando Raw Therapee como alternativa a Raw Studio.

Bien, vamos a instalarla en nuestro sistema a través de los PPA que encontré en LaunchPad. Abrimos un terminal: read more

Leer más » 1 Comentario

Lo mejor de mi RSS del 30 de mayo al 5 de junio

Leer más » 1 Comentario