WordPress

Mozilla y su navegador Firefox ya son de los grandes

2014-08-31 - Categorías: General

Cómo no, siguiendo con la serie de utilidades de código abierto, no me podía olvidar de una de las grandes joyas de la informática. Estoy hablando, como indica el titular, del navegador Mozilla Firefox.

Es uno de mis mejores aliados al conectarme a la web, vela por mi seguridad, por mi privacidad, sigue fiel a los estándares, es gratuito, de código abierto, está hecho por todos, es para todos.. si enumero todas sus características me puedo quedar aquí escribiendo toda una eternidad así que mejor voy a ir un poco al grano.

Situación actual

Son muchas las bondades que tiene éste navegador. Muchos ya lo conocerán, alrededor del 17-18% de los usuarios navegamos con él. Según los últimos datos que encuentro a fecha en que escribo, el ranking de navegadores queda en el orden siguiente:

  1. Internet Explorer
  2. Firefox
  3. Chrome
  4. Safari
  5. Opera

Si quieren corroborar los datos pueden consultar las estadísticas de StatCounter o NetMarketShare, por ejemplo. Hay muchos datos muy interesantes dispersados por Internet, como el uso de los navegadores por país, donde podemos ver que en muchos países Firefox es el navegador más utilizado. Probablemente que tengamos a Internet Explorer como ganador en el ranking mundial se debe a que viene instalado con Windows, pero eso ya es mi opinión.

Naturaleza

El hecho es que un proyecto como Firefox, esté siendo el segundo navegador más utilizado tiene mucho mérito. Pensemos que está organizado por la Fundación Mozilla, una organización sin ánimo de lucro. Una fundación que vive de donaciones, publica sus trabajos totalmente gratis para todos y además nos da el código fuente. No existe una gran multinacional detrás del navegador, sino que se trata de muchos voluntarios de todo el mundo colaborando junto con unos pocos que forman la Fundación Mozilla.

En su propia web pueden encontrar mucha información sobra la naturaleza de sus proyectos:
https://www.mozilla.org/es-ES/mission/

Podemos ver, cada vez más a menudo, proyectos de colaboración para un mundo mejor. Estoy hablando de GNU/Linux que nos proporcionan un sistema operativo completo, estoy hablando también de Wikipedia con su filosofía de ayudar a todo el mundo ofreciendo gratuitamente el conocimiento, y así unos tras otro podemos encontrar otros en la misma linea.

Colaboraciones

Personas de todo el mundo están colaborando activamente, y grandes empresas como por ejemplo Google ayudan al proyecto. La Fundación Mozilla está metida en el desarrollo y estandarización de muchas funcionalidades que tenemos hoy en dia en nuestros navegadores. Algunas de las cuales están parcialmente desarrolladas o en pleno desarrollo. Podemos ver proyectos para almacenar información en el navegador como IndexedDB o el WebGL para hacer gráficos en 3 dimensiones.

Destaca en 2014 la presentación de la mano de Mozilla y Unity (entorno de desarrollo con motor gráfico para desarrollo de videojuegos) la librería asm.js, con la que se podrá usar el navegador para correr completos videojuegos portando código desde C/C++. En Unity quieren hacer sus herramientas compatibles con la web, con lo que se podrán exportar los videojuegos y ejecutar dentro de navegadores, corriendo a la misma velocidad que los tradicionales videojuegos. En todos éstos avances y muchos más está metida la Fundación Mozilla.

El navegador

Para hablar de Firefox no podemos olvidarnos de los otros proyectos de Mozilla: como el lector de correo Thunderbird, o un nuevo sistema operativo para móviles, el Firefox OS, con el que podremos correr programas hechos completamente con lenguajes web. Ya hay acuerdos con Telefónica para poner en marcha éste sistema operativo, veremos a ver qué tal. Nos podemos hacer una idea de que Firefox está donde tiene que estar.

Tenemos las clásicas herramientas que podemos encontrar en otros navegadores como el historial, la navegación privada que está ahora de moda, los marcadores para guardar las direcciones de nuestras páginas favoritas, y un largo etcétera.

Podemos ver todas las características de primera mano aquí:
https://www.mozilla.org/es-ES/firefox/desktop/

Hace un par de años podíamos ver que Firefox se estaba quedando un poco atrás, estaba siendo un poco lento, y no incluía muchos cambios con las últimas versiones. Pero ya veo que nos traían muchas nuevos cambios haciendo más pequeña la barra de menús que por defecto no está visible. Tenemos un menú desplegable a la derecha donde podemos configurar los accesos directos que queramos. Es muy configurable, teniendo gran cantidad de complementos con los que aumentamos sus funciones.

Si eres desarrollador podrás inspeccionar las webs mientras navegas o desarrollas, viendo al detalle el funcionamiento de una web. La primera imagen de arriba del todo en 3D es una de éstas herramientas, el visor 3D. Es la página de Mozilla, si lo activamos podemos mirar desde distintas perspectivas una web viendo como se dibujan las web internamente, viendo como las capas se amontonan unas encima de otras hasta llegar a lo que realmente vemos. ¿Mola verdad? ¡Qué frikada! Jajaja

También es interesante que ahora los de Mozilla te dan gratis una cuenta Sync, con la que puedes también guardar los marcadores de páginas favoritas, historial, contraseñas, etc. Todo ello en dicha cuenta, no hay problema si se te estropea el ordenador o lo cambias. Si pones tu usuario y contraseña de Sync en otro navegador Firefox tendrás todos esos datos de nuevo.

En resumen, una maravilla, otra joya de la informática que debemos de conocer.

Instalar

En la web de Mozilla tenemos un enlace para descargar el navegador:
https://www.mozilla.org/
Debe salir la versión que te debes instalar según tu ordenador, ya sea Windows, Mac, Linux..

Si tienes Linux como en mi caso sólo con poner lo siguiente el línea de comandos ya lo tendremos instalado:

sudo apt-get install firefox

Si has llegado hasta aquí abajo te digo que ya sólo me queda despedirme. Me permites preguntarte ¿qué navegador estas usando? ¿conocías Firefox? ¿te ha gustado el artículo? ¿falta o sobra algo? Para cualquier cosa, un mensaje aquí abajo, un click en me gusta, compartir, etc.. 😉

¡Gracias! ¡Saludos!


VLC: mucho más que un reproductor multimedia

2014-08-24 - Categorías: General

¡Hola de nuevo!

Hoy he cogido otro de los grandes proyectos de código abierto que tenemos disponibles para usar gratuitamente en nuestro ordenador.

¿No les han enviado alguna vez un vídeo que ha grabado su tio, abuelo, madre, un amigo.. y resulta que cuando vas a verlo no se puede ver? Es habitual que salga un error de códec desconocido. Ésto se debe a que muchos reproductores, aunque cada vez menos, no instalan los decodificadores de vídeo. Se instalan aparte mediante otros programas. Podemos encontrar grandes recopilaciones de decodificadores de vídeo y audio juntos en un mismo instalador.

Pues con VLC casi seguro que no vamos a necesitar instalar nada más, puesto que ya trae dentro del propio programa la gran mayoría de decodificadores que podamos necesitar. Éste ha sido uno de los puntos fuertes a la hora de elegir VLC como el reproductor multimedia por defecto de muchos de nosotros.

Un poco de historia

VLC nace como un proyecto universitario en 1996 en París. Sus siglas significan Video Lan Client, y como su nombre indica se trata de un programa para transmitir video por la red LAN. De ahí que ha ido derivando a lo que ahora tenemos.

Originalmente en el proyecto VideoLAN había dos soluciones: el VideoLanClient (VLC) y el VideoLanServer (VLS). Donde VLS se dedicaba a transmitir el video mientras que el VLC lo recibía y reproducía. Actualmente los dos proyectos se han unido en el VLC con lo que podemos emitir y recibir una señal de vídeo con el mismo programa. Que es lo que se puede ver en la imagen inicial.

Cabe destacar que partes de éste programa se han integrado en otros grandes proyectos. Siendo habitual que encontremos que nos recomiendan instalarlo.

Instalar o descargar

En la propia página web podemos encontrar todas las distribuciones disponibles. Está para varias plataformas, cómo no, para Windows, Mac o Linux lo tenemos disponible. En mi caso, como tengo Linux, pongo lo siguiente en línea de comandos y ya lo tengo instalado:

sudo apt-get install vlc

La web del proyecto: http://www.videolan.org/

Más información

Todas las características del VLC: http://www.videolan.org/vlc/features.html

También es interesante un proyecto que tienen de editor de vídeo basado en VLC, el llamado VLMC (video lan movie creator). Es un proyecto muy prometedor porque el programa sería compatible con casi todo tipo de vídeos sin tener que instalar nada extra. Buscan colaboradores como en todo buen proyecto de código abierto 😉

La web del VLMC: http://www.videolan.org/vlmc/

Para más información dejo un par de enlaces:
http://es.wikipedia.org/wiki/VideoLAN
http://es.wikipedia.org/wiki/VLC_media_player

Gran proyecto, existen muchos colaboradores, partners, y se están incluyendo partes del VLC en otras soluciones de la industria multimedia.

Terminando

Sólo me queda explicar un poco la imagen con la que empezaba el post. Ahí se puede ver cómo el primer VLC abierto está emitiendo la señal. Los cuatro restantes VLC están recibiendo y mostrando la señal que emite el primero.

Estaba curioseando y encuentro que tenemos muchos protocolos de streaming de video HTTP, RDP, Icecast, etc.. Cada uno tiene su forma de configurar y explicarlos no es el fin de éste post. Simplemente hay que coger un VLC darle a Archivo->Emitir entonces elegimos lo que queremos emitir: desde cámara, desde otro emisor, desde disco o archivos. Configuramos y lo lanzamos el servidor. Luego abriendo otros VLC le damos a Archivo->Abrir ubicación de red.. y podremos conectar al servidor.

Parece sencillo pero si vamos jugando con el programa veremos que tiene muchas, muchas, muchas opciones 🙂

¡Un saludo!


Audacity: editor y grabador de audio

2014-08-17 - Categorías: General

Cuando uno entra en el mundo de la informática y va necesitando programas para solucionar ciertas tareas, nos podemos encontrar con que no encontramos fácilmente la solución. Con éste post, pretendo empezar con una serie de programas de ‘fuente abierta’, open source para los amigos, que nos solucionan éstas tareas.

Basta navegar un poco y seguro que encontraremos alguno dedicado a lo que necesitemos.

Instalando

En mi caso tengo una distribución de Linux instalado. Si tienes Linux sólo con poner lo siguiente en un terminal tendrás instalado Audacity en tu máquina:

sudo apt-get install audacity

Si tienes otro sistema operativo puedes ir a la página oficial de descarga y elegir tu versión. Simplemente descargas el fichero y sigues las instrucciones de instalación como se hace con la mayoría de programas.

http://audacity.sourceforge.net/download/

Características

Podemos ver en la página del programa que es capaz de grabar con una velocidad de muestreo de hasta 384 000 Hz si tu ordenador es capaz de soportar tanta resolución, con muestras de hasta 32 bits de coma flotante cada una. Soporta los principales formatos de audio como MP3, AC3, WMA, etcétera.. Podemos cortar y pegar fácilmente mientras visualizamos lo grabado, editar, aplicar filtros, mezclar, hacer zoom a trozos de nuestro audio. Enlaza entradas y salidas, eligiendo de dónde queremos grabar, si queremos escuchar mientras grabamos.

Podemos programar grabaciones, establecer umbrales de activación para grabar. Grabación pista a pista al estilo de un estudio de sonido profesional grabando instrumento o instrumento, o voz a voz, mientras unos se escuchan a otros. Podemos tener múltiples pistas, mezclarlas, editarlas por separado. A parte de los efectos de sonido principales, tenemos 117 complementos.

Analizador de espectro, búsqueda de silencios, búsqueda de ritmo, generadores de ruido, de silencio, y un largo etcétera.

http://audacity.sourceforge.net/about/features

Para los expertos, también permite complementos para aumentar sus funciones.

Como puntos negativos sólo le encuentro que la interfaz es bien sencilla en cuanto a diseño: las formas y colores.

Conclusión

Una joya de la informática. Que seguro que haría las delicias de muchos de los aficionados o incluso profesionales que elijan soluciones del mundo de Open Source. Podemos tener resultados muy profesionales si aprendemos a manejarnos bien con éste programa y si tenemos un buen ordenador con buena tarjeta de sonido.

Para terminar sólo me queda poner la página principal del programa:
http://audacity.sourceforge.net/

Espero que lo disfruten.
¡Saludos!


PHP 11: Los traits, reutilizando funciones

2014-08-10 - Categorías: PHP

Sigo repasando las nuevas formas de programar que traen las últimas versiones de PHP. Así siguiendo un poco con la reutilización de código llego a los traits, que son una forma muy sencilla de tener funciones o variables en un sitio que luego puedo reutilizar fácilmente.

Desde PHP 5.4 que tenemos ésto disponible así que…

Venga, vamos con el ejemplo:

<?php
trait MiLibreria1 {
 public function funcion1() {
  echo 'Funcion1 ';
 }
 public function funcion2() {
  echo 'Funcion2 ';
 }
}
trait MiLibreria2 {
 public function funcion3() {
  echo 'Funcion3 ';
 }
 abstract public function funcion4();
 public static $variable1 = 'variable1';
}
class MiTipoDeObjeto {
 use MiLibreria1, MiLibreria2;
 // debemos implementar ésta función porque es abstracta
 public function funcion4(){
  echo 'Function4 ';
 }
}

$objeto = new MiTipoDeObjeto();
// funciones 'heredadas'
$objeto->funcion1();
$objeto->funcion2();
$objeto->funcion3();
$objeto->funcion4();
// variable estática 'heredada'
echo MiTipoDeObjeto::$variable1;

El código habla por sí sólo, es muy sencillo tener funciones o variables en un trait y luego usarlas dentro de una clase con la palabra reservada use. En éste caso tenemos dos librerías que se usan dentro de una clase.

También podemos hacer funciones y variables privadas, estáticas y abstractas como con las clases normales. De igual manera que las funciones abstractas de clases cuando se heredan a los objetos hijos, éstos deben implementarlas, con los traits ocurren lo mismo. De igual forma que las funciones, variables o métodos estáticos en las clases, también podemos usarlos con traits.

La principal diferencia es que podemos usar tantos traits como queramos en una clase.

Espero que haya servido. Para más información me remito a la documentación oficial:
http://php.net/manual/es/language.oop5.traits.php

Un saludo!


Trabajando con ficheros CSV desde PHP

2014-08-03 - Categorías: General

Otra vez más, con PHP tenemos también una utilidad, herramienta, librería, función, o como queramos llamarle.. para hacernos más fácil la vida diaria al programar con PHP.

De igual manera que podemos leer o escribir en un fichero de texto, también podemos leer o escribir línea a línea en ficheros estándar CSV. Los ficheros CSV son los llamados ficheros de valores separados por comas. Dentro se ordenan fila a fila listas de elementos separados por comas, como su nombre indica.

Todo ésto lo podemos manejar con el uso general de un fichero abriendo y cerrando ficheros como veniamos haciendo con fopen y fclose. Y ahora usaremos fgetcsv o fputcsv para leer línea a línea del fichero. Dejemos de tanto hablar de lo mismo y vamos a ver un ejemplo..

Supongamos que tenemos el siguiente fichero:

21,89,7,16,76,18,52,51,58,52
80,3,20,6,83,64,21,73,14,80
7,30,23,75,71,9,96,56,47,25

Tenemos 3 filas de 10 elementos separados por comas.

Supongamos ahora que tenemos el siguiente código PHP:

<?php
$fichero = 'nombreFichero.csv';

// si el fichero lo abrimos para leer correctamente
if (($manejador = fopen ( $fichero, "r" )) !== FALSE) {
 
 echo "Leyendo el fichero: <br>n";
 
 // leemos hasta que se acaba fila a fila
 while ( ($arrayFila = fgetcsv ( $manejador, 1000, "," )) !== FALSE ) {

  // escribimos cada fila por pantalla
  for($i = 0; $i < count ( $arrayFila ); $i ++) {
   echo $arrayFila [$i] . " - ";
  }
  echo "<br>n";
 }
 fclose ( $manejador );
}

if (($manejador = fopen ( $fichero, "w" )) !== FALSE) {
 
 echo "Escribiendo en el fichero: <br>n";
 
 // escribimos 3 filas
 for($i = 0; $i < 3; $i ++) {
  $arrayFila = null;
  // de 10 elementos cada fila
  for($j = 0; $j < 10; $j ++) {
   // llenamos con números aleatorios
   $arrayFila [$j] = rand ( 1, 100 );
  }
  echo var_dump($arrayFila) . "<br>n"; 
  fputcsv ( $manejador, $arrayFila, "," );
 }
 
 fclose ( $manejador );
}

?>

Si lo ejecutamos veremos por pantalla lo siguiente en un navegador:

Leyendo el fichero:
21 – 89 – 7 – 16 – 76 – 18 – 52 – 51 – 58 – 52 –
80 – 3 – 20 – 6 – 83 – 64 – 21 – 73 – 14 – 80 –
7 – 30 – 23 – 75 – 71 – 9 – 96 – 56 – 47 – 25 –
Escribiendo en el fichero:

array (size=10)
  0 => int 8
  1 => int 71
  2 => int 98
  3 => int 71
  4 => int 26
  5 => int 96
  6 => int 3
  7 => int 54
  8 => int 9
  9 => int 51
array (size=10)
  0 => int 77
  1 => int 6
  2 => int 73
  3 => int 65
  4 => int 83
  5 => int 7
  6 => int 11
  7 => int 83
  8 => int 61
  9 => int 25
array (size=10)
  0 => int 78
  1 => int 13
  2 => int 71
  3 => int 31
  4 => int 22
  5 => int 44
  6 => int 92
  7 => int 89
  8 => int 43
  9 => int 77

También podemos ejecutarlo desde línea de comandos con ‘php nombrefichero.php’, para los que no tengan instalado un servidor web.

Espero que sirva para aclarar alguna cosa que no se explique en la documentación oficial, o por lo menos haya quedado más simple.

Un saludo.

Documentación oficial: http://php.net/manual/es/function.fgetcsv.php


PHP 10: Objetos a partir de otros, las interfaces

2014-08-03 - Categorías: PHP
Siguiendo con la serie de mini-tutoriales para empezar a programar con PHP, ahora vamos con las interfaces..

Vienen a ser el siguiente paso en la encapsulación de objetos. Primero teníamos las clases que representan objetos únicos, con los cuales podemos construir otros a partir de ellos utilizando la palabra ‘extends’. Luego podíamos declarar clases abstractas que tenían métodos abstractos que no se implementaban (programaban) en la clase padre, sino que se obligaba a que se implementaran en las clases hijas. Las clases hijas extendían de la clase abstracta padre de igual manera que antes.

Ahora tenemos las interfaces, que vienen a ser clases que simplemente nos dicen los métodos que hay que implementar en las clases hijas. Unas interfaces se pueden extender en otras, con lo que heredan las declaraciones de los métodos utilizando la palabra clave extends, pero siguen sin implementar los métodos porque siguen siendo interfaces. Pero cuando llegamos a una clase hija que va a implementar dichos métodos utilizaremos la palabra clave implements. Con un ejemplo se verá claro y rápido.

El ejemplo

<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');

// interfaz que obliga a implementar dos funciones
interface iVehiculo {
    public function escribirMatricula();
    public function coordenadas();
}

// clase que implementa la interfaz anterior
class vehiculo implements iVehiculo {
 public $x=0;
 public $y=0;
 public $matricula;
 
 public function coordenadas(){
  return '(' . $this->x . ', ' . $this->y . ')'; 
 }
 
 public function escribirMatricula() {
  return $this->matricula;
 }
}

// moto de tipo vehiculo que hereada las variables y funciones anteriores
class moto extends vehiculo  {

    public $velocidadMaxima;

    // funcion que devuelve los datos para escribirlos en la respuesta
    public function __toString(){
     $cadena = 'Esto es una moto con matrícula ' . $this->escribirMatricula() 
     . ', con velocidad máxima ' . $this->velocidadMaxima 
     . ' y coordenadas ' . $this->coordenadas() . '. <br>';
     
     return $cadena;
    }
}

// coche que hereda de vehiculo de igual manera que moto
class coche extends vehiculo {

    public $tipo;

    // igual que en moto, funcion que devuelve los datos para escribirlos en la respuesta
    public function __toString(){
     $cadena = 'Esto es un coche con matrícula ' . $this->escribirMatricula()
     . ', de tipo ' . $this->tipo
     . ' y coordenadas ' . $this->coordenadas() . '. <br>';
      
     return $cadena;
    }
}

$micoche = new coche();
$mimoto = new moto();

// tanto la moto como el coche tienen matrícula
// porque heredan la variable matrícula
$micoche->matricula = "ABC123";
// sólo es coche tiene tipo
$micoche->tipo = "utilitario";
$mimoto->matricula = "DEF123";
// sólo la moto tiene velocidad máxima
$mimoto->velocidadMaxima = 300;

echo '<html lang="es"><head><meta charset="utf-8"></head><body>';
echo $micoche;
echo $mimoto;
echo '</body></html>';

Si ejecutamos el script anterior debemos ver lo siguiente:

Esto es un coche con matrícula ABC123, de tipo utilitario y coordenadas (0, 0). Esto es una moto con matrícula DEF123, con velocidad máxima 300 y coordenadas (0, 0).

Resumiendo, las interfaces son una forma sencilla de obligar a programar de cierta manera las clases que implementan dicha interfaz. Un dato importante es que una clase puede extender sólo de otra, mientras que puede implementar varias interfaces. A fecha en que escribo no tenemos herencia múltiple en PHP, técnicamente las interfaces no nos dan herencia entre objetos, simplemente nos orientan sobre los métodos o funciones que debemos programar en las clases.

Documentación oficial: http://php.net/manual/es/language.oop5.interfaces.php


PHP 9: Objetos, clases y métodos abstractos

2014-04-20 - Categorías: PHP

Otro fin de semana, ésta vez con festivos por la semana santa. Tengo algo de tiempo así que voy a continuar con los minitutoriales para aprender sobre éste apasionante lenguaje de programación que tanto se está usando en el desarrollo de páginas web.

Según las últimas estadísticas que he estado viendo, ronda el 80% de las páginas web que estan hechas con PHP. Aparte de otros lenguajes que se usan junto con PHP como JavaScript, o los lenguajes de marcado.

Siguiendo con la construcción de objetos a partir de otros vamos ahora con las clases abstract.

Empezando

En el tutorial anterior veíamos como extender clases creando clases hijas que heredaban las variables y métodos de la clase padre. No teniendo entonces que volver a programar el mismo código.

Una clase abstract es cualquier clase que tenga al menos un elemento abstracto. Éstos elementos abstractos no deben programarse en la clase padre y es obligatorio hacerlo en las clases hijas. Por ejemplo:

<?php

// clase base
abstract class vehiculo {

public $matricula;

abstract public function escribirMatricula();
}

// clases que extienden la clase base
class moto extends vehiculo {

public $velocidadMaxima;

public function escribirMatricula() {
echo $this->matricula;
}

}

class coche extends vehiculo {

public $tipo;

public function escribirMatricula() {
echo $this->matricula;
}

}

class camion extends vehiculo {

public $numeroRuedas;

public function escribirMatricula() {
echo $this->matricula;
}

}

// creamos 3 vehiculos
$micoche = new coche();
$mimoto = new moto();
$micamion = new camion();

// tanto la moto como el coche y el camión tienen matrícula
// porque heredan la variable matrícula
$micoche->matricula = "ABC123";
$micoche->tipo = "utilitario";
$mimoto->matricula = "DEF123";
$mimoto->velocidadMaxima = 300;
$micamion->matricula = "GHI123";
$micamion->numeroRuedas = 12;

$micoche->escribirMatricula();
echo " - ";
$mimoto->escribirMatricula();
echo " - ";
$micamion->escribirMatricula();

No tiene más historia, las clases abstractas lo que hacen es declarar métodos abstractos que no se implementan, y nos obligan a implementarlos en las clases hijas.

Como vienen siendo costumbre de nuevo me remito a la documentación oficial:

http://www.php.net/manual/es/language.oop5.abstract.php

..donde puede encontrar mucha más información sobre ésto y ejemplos mucho más elaborados. Espero que con mi mini-ejemplo haya ayudado, sino mensaje aquí abajo 😉

Un saludo y felices fiestas!


PHP 8: Creando objetos a partir de otros, herencia simple

2014-03-30 - Categorías: PHP
Objetos relacionados

Estoy con algo más de tiempo, así que jugando un poco más con la programación orientada a objetos, les escribo ahora sobre cómo crear objetos a partir de otros de la forma más simple.

Hay tres formas de crear objetos a partir de otros objetos: mediante extends, con clases abstract, y con interface.

Todo éste proceso es lo que se llama herencia, donde los objetos hijos no heredan casas ni coches ni grandes fortunas xD, si no que en éste caso heredan funciones y variables.

Empezando con la herencia simple

Vamos a suponer lo siguiente. Queremos usar en nuestro programa la información de ciertos vehículos, y dichos vehículos pueden ser motos, coches y camiones. Usando la palabra reservada extends vamos a ver con un ejemplo lo sencillo que es el siguiente:

<?php

// clase base
class vehiculo {

    public $matricula;

}

// clases que extienden la clase base
class moto extends vehiculo {

    public $velocidadMaxima;

}

class coche extends vehiculo {

    public $tipo;

}

class camion extends vehiculo {

    public $numeroRuedas;

}

// creamos 3 vehiculos
$micoche = new coche();
$mimoto = new moto();
$micamion = new camion();

// tanto la moto como el coche y el camión tienen matrícula
// porque heredan la variable matrícula
$micoche->matricula = "ABC123";
$micoche->tipo = "utilitario";
$mimoto->matricula = "DEF123";
$mimoto->velocidadMaxima = 300;
$micamion->matricula = "GHI123";
$micamion->numeroRuedas = 12;

echo "El vehículo con matrícula " . $micamion->matricula . " tiene " . $micamion->numeroRuedas . " ruedas.";

Si ejecutamos el código fuente nos saldrá: «El vehículo con matrícula GHI123 tiene 12 ruedas.»

Lo importante o nuevo en éste capítulo de la serie es la palabra reservada extends con la que se crean las nuevas clases a partir de otras. Aquí arriba tenemos cuatro clases, la clase base que tiene sólo una variable para guardar la matrícula.

Por otro lado tenemos las clases coche, moto y camión que se crean a partir de la clase base vehículo. Y por lo tanto heredan la variable para guardar la matrícula. Podemos ver que en las últimas líneas del ejemplo, tanto $micoche, como $mimoto y $micamion tienen la variable $matricula aunque no se ha declarado en dichas clases pero sí en la clase base.

Imaginemos entonces si quisiéramos podríamos crear a su vez subtipos de camiones que extendieran de la clase camión, añadiendo así más variables y funciones. Así sucesivamente.

Terminando

Para terminar, podemos de paso ver qué pasa cuando modificamos la clase base y cambiamos la variable de la matrícula a protected:

// clase base
class vehiculo {
    protected $matricula;
}

Ahora poniendo matricula protegido nos saldrá un error, porque protegiendo dicha variable lo que hacemos es que no se herede en las clases hijas. Es decir, en el caso del camión, protegiendo la matrícula, dicho camión ahora sólo tendrá una variable llamada $numeroRuedas porque no ha heredado la variable $matricula.

Hay otros tipos de como el que acabamos de ver protected, también tenemos abstract y static, pero eso es para otro post.

De nuevo me remito a la documentación oficial: http://www.php.net/manual/es/

Si te ha gustado, te ha parecido interesante, te ha aclarado alguna cosa, quieres recomendarlo, decirme que siga escribiendo, darme ánimos, dale un click a +1, comparte, facebootealo, tuitea, tuentiea o deja un mensaje aquí abajo que es gratis 😉

Un saludo!


PHP 7: Empezando con clases y objetos

2014-03-29 - Categorías: PHP
Objetos relacionados

A partir de ahora vamos a entrar en la programación orientada a objetos, POO para los amigos. En las técnicas de programación utilizar objetos es básico para poder hacer programas bien estructurados que se puedan reutilizar o  modificar.

En programación, una clase es un objeto, y un objeto es una clase. Éstas clases de PHP tienen unas variables y unos métodos o funciones.

Dicho ésto vamos al grano.

Una primera clase básica

A continuación tenemos un objeto, que es una clase de PHP. Éste objeto representa un avión que está en unas coordenadas, tiene un tipo de motor, cierta matrícula, y está en un estado determinado. Por ejemplo:

<?php

// se declara el objeto
class Avion {

    // variables
    public $x, $y, $z;
    private $tipoMotor;
    public $matricula;
    private $estado;

    // a partir de aquí estan las funciones
    // constructor de la clase
    function __construct() {
        $this->x = $this->y = $this->z = 0;
        $this->tipoMotor = 1;
        $this->matricula = "No definida";
        $this->estado = "No definido";
    }

    public function getTipo() {
        switch ($tipoMotor) {
            case 1: $descripcion = "Hélices";
                break;
            case 2: $descripcion = "Propulsión a chorro";
                break;
            default:
                $descripcion = "Tipo no encontrado";
        }
        return $descripcion;
    }

    public function getEstado() {
        return "El avión con matrícula >" . $this->matricula . "< está: " . $this->estado;
    }

    public function despegar() {
        $this->estado = "Volando";
    }

    public function aterrizar() {
        $this->estado = "Esperando";
    }

    public function setMatricula($m) {
        $this->matricula = $m;
    }

    // destructor de la clase
    function __destruct() {
        echo "El avión con matrícula >" . $this->matricula . "< se ha destruido.";
    }

}

// fin del objeto
// a partir de aquí éste código usa el objeto avión
$miavion = new Avion();
$miavion->setMatricula("ABC123");
$miavion->despegar();
dispose($miavion);
echo "Mi avión está en (" . $miavion->x . ", " . $miavion->y . ", " . $miavion->z . ")<br>";
echo $miavion->getEstado() . "<br>";

Para empezar los objetos se crean usando la palabra reservada class. Tenemos dos partes principales dentro de la clase. La primera parte donde se declaran las variables, y después las funciones para ejecutar los algoritmos de programación.

Tenemos $this, que es especial. ¡Ojo! ésta variable es muy importante. Representa la clase, se usa dentro de dicha clase, y con ella accederemos a las variables y funciones cuando desarrollemos dicha clase. Con el símbolo -> después del $this accederemos así: $this->variable

De igual manera con el objeto $miavion->nombreDeVariable o $miavion->nombreDeFuncion() fuera de la clase.

Los tipos básicos de variables y funciones son public y private. Los private, como su nombre indica, son privados y sólo se pueden usar dentro de la clase. Los públicos se pueden usar desde fuera. Si vemos abajo del todo en la línea 62 de código se usa $miavion->x porque x es una variable pública. No podremos por ejemplo acceder a la variable estado de la forma $miavion->estado porque es privada. Lo mismo pasa con la variable $tipoMotor, no podemos acceder directamente, por ello se declara la función getTipo() que lo hace por nosotros y nos dice el tipo de motor que tiene el avión.

Constructor y destructor de una clase

El resto de funciones no tiene misterio, salvo dos especiales, el constructor y destructor de la clase. Si ejecutamos el ejemplo nos mostrará lo siguiente:

Mi avión está en (0, 0, 0)
El avión con matrícula >ABC123< está: Volando
El avión con matrícula >ABC123< se ha destruido.

El constructor empieza en la línea 14 y el destructor en la 50. Éstas dos funciones se ejecutan automáticamente cuando se crea un objeto avión y cuando se destruye respectivamente. Se suelen usar para hacer tareas de inicialización en el caso del constructor o para terminar procesos con el destructor. En el ejemplo el constructor simplemente le da unos valores a las variables de la clase y el destructor simplemente muestra un mensaje. Al ejecutarlo el ejemplo podemos ver que cuando termina el código PHP se llama automáticamente al destructor.

Terminando

Hay otros tipos de variables y funciones. También se pueden crear varios constructores.  Y muchas otras cosas más. Para terminar con éste minitutorial para empezar con los objetos de PHP me remito una vez más a la documentación oficial: http://www.php.net/manual/es/language.oop5.php

Si te ha gustado, te ha parecido útil o quieres que siga escribiendo dale aquí abajo al +1, al me gusta, a compartir, etcétera.. también puede dejar un comentario 😉

Un saludo!


PHP 6: Dividir en varios ficheros, includes, requires..

2014-03-25 - Categorías: PHP

Después de ir dividiendo nuestra aplicación, programa o algoritmo que estemos haciendo usando funciones, tenemos también lo includes y requires.

Siguiendo con aquello de «divide y vencerás». Podríamos por ejemplo dividir las secciones del menú, cabecera, contenido
Al grano..

include y require

Includo y require son igual, por ejemplo si tenemos el siguiente archivo php6.php:

<?php
include "cabecera.php";
include "menu.php";
include "contenido.php";
?>

Que incluye al archivo cabecera.php siguiente:

<?php
echo «Aquí va la cabecera»;
?>

Por ejemplo un menú así:

<?php
echo «Aquí el menú»;
?>

Y el fichero que escribe el contenido:

<?php
echo "Y el contenido";
?>

Sea lo que sea que tengamos en los ficheros incluidos se ejecutarán desde el primer archivo en el orden y posición desde donde se llamen. Si no encuentra el archivo incluido mostrará entonces una advertencia (warning). Sin embargo, si usamos require y no encuentra el archivo incluido entonces parará y mostrará un error.

include_once y require_once

Para terminar con éste minitutorial, tenemos los once. La diferencia con los anteriores es que si ya hemos incluido o requerido un fichero y lo intentamos volver a require_once o include_once no lo va a hacer por segunda vez.

include_once significa incluir una vez y require_once siginifica requerir una vez. Con un poco de inglés nos acordaremos fácilmente. Sencillo verdad?¿

Sólo me queda remitirme a la documentación oficial. Si te ha gustado, te ha parecido interesante, quieres que siga escribiendo, quieres colaborarme, dale +1, comparte, o deja un mensaje.. 🙂

Espero pronto seguir con éstos minitutoriales.

Un saludo.


PHP 5: Funciones

2014-03-20 - Categorías: PHP

Hoy les dejo un resúmen sobre las funciones. Tenemos con ellas la primera herramienta para dividir nuestra aplicación en pequeñas partes más fáciles de desarrollar. Éstas funciones se pueden después reutilizar para no tener que repetir el mismo código una y otra vez.

Al programar, se aplica mucho el dicho «Divide y vencerás». Cuando tienes un problema lo bastante grande para resolverlo directamente conviene dividirlo en funciones. O simplemente para ver el programa más claro también conviene usar funciones.

El ejemplo

Es un tema sencillo así que con éste resúmen y un ejemplo seguro que puede quedar claro:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <p>
            <?php

   function tareaCompleja($totalrepeticiones) {
    $total = 0;
    for ($i = 0; $i < $totalrepeticiones; $i++) {
     $total = $total + $i;
    }
    return $total;
   }

   $mivariable = 1000;
   echo tareaCompleja($mivariable);
   
            ?>
        </p>
    </body>
</html>

Vamos a comentar el ejemplo. Tenemos un documento que es una web, que tiene dentro incrustado código PHP. Tenemos una función llamada tareaCompleja que realiza un bucle for.

Fijémonos primero después de la declaración de la función. Tenemos una variable que vale 1000 y en la última línea 19 del ejemplo tenemos un echo que usa la función.

Tenemos dos cosas importantes: una el echo anterior que llama a la función, la otra es la función que devuelve un valor. Cuando la función se llama desde el echo anterior, se ejecuta el código calculando el total. Con el return se devuelve el valor de total, en éste caso 499500. Entonces el echo al final lo que hace es un ‘echo 499500’ con lo que en la página web se imprimirá dicho número.

Tenemos entonces que con la palabra reservada function creamos las funciones. Dichas funciones pueden recibir información, dicha información se recibe en éste caso con la variable $mivariable que se pone entre paréntesis al usar la función. Y por último la función puede devolver o no un valor con la palabra reservada return.

Terminando

También tenemos muchas funciones que el propio PHP nos da. Ya en anteriores capítulos puse la función phpinfo() que escribía todas las configuraciones. Por ejemplo poniendo en un fichero .php lo siguiente lo veremos:

<?php 
phpinfo();

Antes de contruir una nueva función conviene mirar en la documentación si ya está y usarla directamente.

Para terminar me remito de nuevo a la documentación oficial de PHP.

Si te ha sido útil, te ha gustado, o simplemente quieres decirme que siga escribiendo en el blog o cualquier otra cosa puedes darle +1, compartir, dejar un comentario.. justo aquí debajo.

Un saludo.


PHP 4: Bucles

2014-03-17 - Categorías: PHP
Bueno, ya llegando a éste minitutorial se va poniendo divertido. Aquí tenemos las primeras estructuras de control que con pocas líneas de código nos van a permitir hacer muchas cosas. Ahora te preguntarás que como con programando pocas líneas podemos hacer muchas cosas. Sí!

Para entenderlo rápidamente, por ejemplo, si queremos hacer una tarea un millón de veces. Programando un bucle que podría tener apenas tres lineas podría hacerse.

for

El bucle for ejecuta un número de veces una tarea, por ejemplo:

for($i=1; $i<=1000000; $i++){
  // ésto es un comentario que no se ejecuta
  // porque tiene delante las barras
  echo $i;
}

Éste bucle usa una variable $i que va desde 1 hasta 1000000, saltando de uno en uno. Es decir se ejecuta un millón de veces el echo $i;

En la primera línea podemos ver el valor inicial, hasta cuándo ejecuta el bucle, y de cuánto es el incremento entre vuelta y vuelta del bucle. Éste miniprograma imprimirá «123456789101112131415… así sucesivamente hasta llegar a …9999991000000»

Si tratas de ejecutar éste bucle probablemente no terminará porque un millón de veces es demasiado, saltará un temporizador en el servidor y cortará la ejecución por tardar demasiado.

foreach

El foreach nos sirve para recorrer los vectores o arrays que hemos visto en otro tutorial anterior. Por ejemplo si tenemos un vector como el siguiente:

$vector = array("nombre" => "Pepe", "apellidos" => "Por Ejemplo");
$vector2[0] = "Pepe";
$vector2[1] = "Por Ejemplo";
   
foreach ($vector as $valor) {
  echo $valor . ", ";
}
foreach ($vector2 as $clave => $valor) {
  echo $clave . " => " . $valor . ", ";
}

El primer bucle va a imprimir lo siguiente: Pepe, Por Ejemplo,
El segundo bucle: 0 => Pepe, 1 => Por Ejemplo,

Si nos fijamos en los dos vectores, tenemos en $vector un vector de dos elementos donde la clave nombre almacena Pepe y la clave apellidos almacena Por ejemplo. En el segundo vector tenemos lo mismo en los valores pero las claves, en vez de ser nombre y apellidos son 0 y 1.

Si hubieramos puesto en el segundo bucle en vez del $vector2 al $vector, nos hubiera impreso lo siguiente: nombre => Pepe, apellidos => Por Ejemplo,

while

Supongamos que ahora queremos ejecutar una tarea mientras que se cumpla una condición, papra ésto es es el bucle while. Por ejemplo:

$variable = 1;
while($variable < 3){
  echo $variable . ", ";
  $variable++;
}

Éste bucle escribirá lo siguiente: 1, 2,

De forma que si la $variable tuviera en un principio el valor 20, no entraría en el bucle y no se ejecutaría nunca lo contenido entre llaves.

do.. while

Si lo que queremos es primero ejecutar una tareas y después comprobar si se cumple una condición para continuar el bucle usamos el do.. while. Al contrario que con el while simple, primero ejecuta lo contenido entre llaves, luego comprueba, ésta es la diferencia. Por ejemplo:

$variable = 3;
do {
  echo $variable . ", ";
  $variable++;
} while($variable < 3);

Éste código escribirá: 3,

Ahora es cuando uno piensa, pero si he puesto que la variable debe ser menor a 3. El problema es que primero ejecuta, como he puesto arriba..

Terminando

A partir de aquí ya empieza la imaginación, podemos poner un bucle dentro de otro, un foreach con varios for dentro o viceversa. Espero haberme explicado bien, sino haz un do.. while(noentender) xDD

O deja un comentario.

Me remito de nuevo, como de costumbre a la documentación oficial:

http://www.php.net/manual/es/language.control-structures.php

Si te ha gustado o te ha sido útil dale click a compartir, +1..

¡Un saludo!

© 2024 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.