Tutorial PHP(10): Tipo object.
object
Inicialización de Objetos
Para crear un nuevo object se utiliza la declaración new para instanciar una clase.
En primer lugar tenemos que tener una clase
<pre>?php class persona { } ?>
Implementaremos una clase llamada Persona que tendrá como atributo (variable) su nombre y dos métodos (funciones), uno de dichos métodos inicializará el atributo nombre y el siguiente método mostrará en la página el contenido del mismo.
<?php class Persona { private $nombre; public function inicializar($nom) { $this->nombre=$nom; } public function imprimir() { echo $this->nombre; echo '<br /> } } $per1=new Persona(); $per1->inicializar('Juan'); $per1->; imprimir(); $per2=new Persona(); $per2->inicializar('Ana'); $per2->imprimir(); ?>
<? class Caja{ var $alto; var $ancho; var $largo; var $contenido; var $color; function introduce($cosa){ $this->contenido = $cosa; } function muestra_contenido(){ echo $this->contenido; } } ?>
En este ejemplo se ha creado la clase Caja, indicando como atributos el ancho, alto y largo de la caja, así como el color y el contenido. Se han creado, para empezar, un par de métodos, uno para introducir un elemento en la caja y otro para mostrar el contenido.
Si nos fijamos, los atributos se definen declarando unas variables al principio de la clase. Los métodos se definen declarando funciones dentro de la clase.
Para la clase Caja definida anteriormente, se podría declarar este constructor:
function Caja($alto=1,$ancho=1,$largo=1,$color="negro"){ $this->alto=$alto; $this->ancho=$ancho; $this->largo=$largo; $this->color=$color; $this->contenido=""; }
La herencia
La programación orientada a objetos tiene un mecanismo llamado herencia por el que se pueden definir clases a partir de otras clases. Las clases realizadas a partir de otra clase o mejor dicho, que extienden a otra clase, se llaman clases extendidas o clases derivadas.
Las clases extendidas heredan todos los atributos y métodos de la clase base. Además, pueden tener tantos atributos y métodos nuevos como se desee.
Para ampliar el ejemplo que venimos desarrollando, la clase Caja, vamos a crear una clase extendida llamada Caja_tematica. Esta clase hereda de caja, pero además tiene un «tema», que es la descripción del tipo de cosas que metemos en la caja. Con esto podemos tener varias cajas, cada una con cosas de un tema concreto.
class Caja_tematica extends Caja { var $tema; function define_tema($nuevo_tema){ $this->tema = $nuevo_tema; } }
En esta clase heredamos de Caja, con lo que tenemos a nuestra disposición todos los atributos y métodos de la clase base. Además, se ha definido un nuevo atributo, llamado $tema, y un método, llamado define_tema(), que recibe el tema con el que se desea etiquetar la caja.
Tutorial PHP(9): Tipo array.
Arrays
Un array en PHP es realmente un mapa ordenado, es decir, un tipo de datos que asocia valores con claves. Este tipo puede usarse como una matriz real, una lista o vector, un diccionario, una colección, una pila, una cola, etc … Ya que los valores de un array pueden ser otros arrays, árboles y también son posibles arrays multidimensionales.
Los elementos del array son datos que están asociados, a su vez, a un elemento del array llamado índice. Supongamos el array nombre[0], nombre[1], nombre[2]. El nombre de variable para el array es “nombre” mientras que los índices son 0, 1 y 2.
El índice se caracteriza por conectar los elementos del array por medio de una numeración que empieza por cero. Así, el primer elemento del array tiene índice cero, el segundo tiene índice uno, y así sucesivamente.
Sintaxis
Especificación con array().
Un array se crea con el constructor del lenguaje array(), formando parejas clave => valor como argumentos.
array( 0 => valor1, 1 => valor2, 2 => valor3, ... ) o un array asociativo array( clave0 => valor1, clave1 => valor2, clave2 => valor3, ... )
La coma después del elemento del array es opcional y se puede omitir.
A partir de PHP 5.4 también se puede usar la sintaxis de array corta, que reemplaza array() con [].
Ejemplo: Un array simple
<?php $vector = array( "1" => "uno", "2" => "dos", ); // a partir de PHP 5.4 $vector = [ "uno" => "1", "dos" => "2", ]; ?>
La clave puede ser un integer o un string. El valor puede ser de cualquier tipo.
<?php $moneda=array("espana"=> "Euro","Reino Unido" => "Libra","USA" => "Dolar"); ?>
o lo que es lo mismo,
<?php $moneda["espana"]="Euro"; $moneda["Reino Unido"]="Libra"; $moneda["USA"]="Dolar"; ?>
Ejemplo: Un array multidimensional
Una forma muy practica de almacenar datos es mediante la creación de arrays multidimensionales (tablas). Pongamos el ejemplo siguiente: Queremos almacenar dentro de una misma tabla el nombre, moneda y lengua hablada en cada país. Para hacerlo podemos emplear un array llamado país que vendrá definido por estas tres características (claves). Para crearlo, deberíamos escribir una expresión del mismo tipo que la vista anteriormente en la que meteremos una array dentro del otro. Este proceso de incluir una instruccion dentro de otra se llama anidar y es muy corriente en programación:
<?php $pais=array ( "espana" =>array ( "capital"=>"Madrid", "lengua"=>"Castellano", "moneda"=>"Euro" ), "Reino Unido" =>array ( "capital"=>"Londres", "lengua"=>"Inglés", "moneda"=>"Libra" ) ); echo $pais["espana"]["moneda"] //Saca en pantalla: "Euro" ?>
Los elementos de array se pueden acceder utilizando la sintaxis array[key].
<?php $arr = array(5 => 1, 12 => 2); $arr[] = 56; // Esto es lo mismo que $arr[13] = 56; en este punto de el script porque la última clave fue 12 $arr["x"] = 42; // Esto agrega un nuevo elemento a el array con la clave "x" ?>
A veces no es necesario especificar la clave. PHP la asume como un número entero creciente de unidad en unidad
</pre> <?php $ciudad[] = "Sevilla"; $ciudad[] = "Madrid"; $ciudad[] = "Barcelona"; $ciudad[] = "Valencia"; echo $ciudad[3]; ?>
Funciones útiles.
current – devuelve el valor del elemento que indica el puntero
pos – realiza la misma función que current
reset – mueve el puntero al primer elemento de la tabla
end – mueve el puntero al último elemento de la tabla
next – mueve el puntero al elemento siquiente
prev – mueve el puntero al elemento anterior
count – devuelve el número de elementos de una tabla.
Veamos un ejemplo de las funciones anteriores:<?php $semana = array("lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domindo"); echo count($semana); //Mostramos el número de elementos //situamos el puntero en el primer elemento reset($semana); echo current($semana); //lunes next($semana); echo pos($semana); //martes end($semana); echo pos($semana); //domingo prev($semana); echo current($semana); //sábado ?>Recorrido de arrays mediante el bucle for
<?php $array[0] = "Uno"; $array[1] = "Dos"; $array[2] = "Tres"; $array[3] = "Cuatro"; $array[4] = "Cinco"; $array[5] = "Seis"; $array[6] = "Siete"; $array[7] = "Ocho"; for($i=0;$i <= 7; $i++) { echo $array[$i].'<br />'; } ?>Recorrer una tabla con las funciones list y each
<?php $visitas = array("lunes"=>200, "martes"=>186, "miércoles"=>190, "jueves"=>175); reset($visitas); while (list($clave, $valor) = each($visitas)) { echo "el día $clave ha tenido $valor visitas<BR>"; } ?>La función each() devuelve el valor del elemento actual, en este caso, el valor del elemento actual y su clave, y desplaza el puntero al siguiente, cuando llega al final devuelve FALSO, y termina el bucle while()
Recorrido de arrays mediante foreach
Este tipo de recorridos se suele usar cuando obtenemos datos de una base de datos.
El tipo de array que nos suele devolver una consulta a la base de datos es similar al siguiente:
$resultado = array(
array('nombre' => 'Antonio', 'apellidos' => 'Gómez Gómez', 'telefono' => '675832145'),
array('nombre' => 'Pedro', 'apellidos' => 'Guillén Gastón', 'telefono' => '674562178'),
array('nombre' => 'Dolores', 'apellidos' => 'Candela Quema', 'telefono' => '689765432'),
...
array('nombre' => 'Rubén', 'apellidos' => 'Guardia Jurado', 'telefono' => '654213896'),
);
<?php $rows = array( array( 'nombre' => 'Antonio', 'apellidos' => 'Gómez Gómez', 'telefono' => '675832145'), array( 'nombre' => 'Pedro', 'apellidos' => 'Guillén Gastón', 'telefono' => '674562178'), array( 'nombre' => 'Dolores', 'apellidos' => 'Candela Quema', 'telefono' => '689765432'), array( 'nombre' => 'Rubén', 'apellidos' => 'Guardia Jurado', 'telefono' => '654213896') ); foreach($rows as $valor) { echo 'Nombre: ' . $valor['nombre'] . '<br />'; } ?>array_slice()
Para disminuir el número de casillas de un arreglo tenemos varias funciones. Entre ellas, array_slice() la utilizamos cuando queremos recortar algunas casillas del arreglo, sabiendo los índices de las casillas que deseamos conservar.
Recibe tres parámetros. El array, el índice del primer elemento y el número de elementos a tomar, siendo este último parámetro opcional.
En el ejemplo siguiente tenemos un array con cuatro nombres propios. En la primera ejecución de array_slice() estamos indicando que deseamos tomar todos los elementos desde el índice 0 (el principio) hasta un número total de 3 elementos.
El segundo array_slice() indica que se tomen todos los elementos a partir del índice 1 (segunda casilla).
<?php $entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo"); //modifico el tamaño $salida = array_slice ($entrada, 0, 3); //muestro el array foreach ($salida as $actual) echo $actual . "<br>"; echo "<p>"; //modifico otra vez $salida = array_slice ($salida, 1); //muestro el array foreach ($salida as $actual) echo $actual . "<br>"; ?>Tendrá como salida:
Miguel
Pepe
JuanPepe
Juanarray_shift()
Esta función extrae el el primer elemento del array y lo devuelve. Además, acorta la longitud del array eliminando el elemento que estaba en la primera casilla. Siempre hace lo mismo, por tanto, no recibirá más que el array al que se desea eliminar la primera posición.En el código siguiente se tiene el mismo vector con nombres propios y se ejecuta dos veces la función array_shift() eliminando un elemento en cada ocasión. Se imprimen los valores que devuelve la función y los elementos del array resultante de eliminar la primera casilla.
<?php $entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo"); //quito la primera casilla $salida = array_shift ($entrada); //muestro el array echo "La función devuelve: " . $salida . "<br>"; foreach ($entrada as $actual) echo $actual . "<br>"; echo "<p>"; //quito la primera casilla, que ahora sería la segunda del array original $salida = array_shift ($entrada); echo "La función devuelve: " . $salida . "<br>"; //muestro el array foreach ($entrada as $actual) echo $actual . "<br>"; ?>Da como resultado:
La función devuelve: Miguel
Pepe
Juan
Julio
PabloLa función devuelve: Pepe
Juan
Julio
Pablounset()
Se utiliza para destruir una variable dada. En el caso de los arreglos, se puede utilizar para eliminar una casilla de un array asociativo (los que no tienen índices numéricos sino que su índice es una cadena de caracteres).Veamos el siguiente código para conocer cómo definir un array asociativo y eliminar luego una de sus casillas.
<?php $estadios_futbol = array("Barcelona"=> "Nou Camp","Real Madrid" => "Santiago Bernabeu","Valencia" => "Mestalla","Real Sociedad" => "Anoeta"); //mostramos los estadios foreach ($estadios_futbol as $indice=>$actual) echo $indice . " -- " . $actual . "<br>"; echo "<p>"; //eliminamos el estadio asociado al real madrid unset ($estadios_futbol["Real Madrid"]); //mostramos los estadios otra vez foreach ($estadios_futbol as $indice=>$actual) echo $indice . " -- " . $actual . "<br>"; ?>La salida será la siguiente:
Barcelona -- Nou Camp
Real Madrid -- Santiago Bernabeu
Valencia -- Mestalla
Real Sociedad -- AnoetaBarcelona -- Nou Camp
Valencia -- Mestalla
Real Sociedad -- Anoetaarray_push()
Inserta al final del array una serie de casillas que se le indiquen por parámetro. Por tanto, el número de casillas del array aumentará en tantos elementos como se hayan indicado en el parámetro de la función. Devuelve el número de casillas del array resultante.Veamos este código donde se crea un arreglo y se añaden luego tres nuevos valores.
<?php $tabla = array ("Lagartija", "Araña", "Perro", "Gato", "Ratón"); //aumentamos el tamaño del array array_push($tabla, "Gorrión", "Paloma", "Oso"); foreach ($tabla as $actual) echo $actual . "<br>"; ?>Da como resultado esta salida:
Lagartija
Araña
Perro
Gato
Ratón
Gorrión
Paloma
Osoarray_merge()
Ahora vamos a ver cómo unir dos arrays utilizando la función array_merge(). A ésta se le pasan dos o más arrays por parámetro y devuelve un arreglo con todos los campos de los vectores pasados.En este código de ejemplo creamos tres arrays y luego los unimos con la función array_merge()
<?php $tabla = array ("Lagartija", "Araña", "Perro", "Gato", "Ratón"); $tabla2 = array ("12","34","45","52","12"); $tabla3 = array ("Sauce","Pino","Naranjo","Chopo","Perro","34"); //aumentamos el tamaño del array $resultado = array_merge($tabla, $tabla2, $tabla3); foreach ($resultado as $actual) echo $actual . "<br>"; ?>Da como resultado:
Lagartija
Araña
Perro
Gato
Ratón
12
34
45
52
12
Sauce
Pino
Naranjo
Chopo
Perro
34sort()
Es la función más básica para ordenar arrays en PHP. Ordena el array de valores menores a mayores. Lo vemos con un ejemplo.
<?php //Ordenar desde el menor al mayor $alumnos = array("Pepe", "Juan", "Marcelo", "Alberto", "Gerardo"); sort($alumnos); foreach ($alumnos as $key => $val) { echo "alumnos[" . $key . "] = " . $val . ""; }Que dará como resultado:
alumnos[0] = Alberto
alumnos[1] = Gerardo
alumnos[2] = Juan
alumnos[3] = Marcelo
alumnos[4] = Pepersort()
Esta función ordena el array por valores. La "r" delante quiere decir que ordena en orden reverso, de mayor a menor.
<?php //ordenar de mayor a menor (orden inverso... Reverse order) $alumnos = array("Pepe", "Juan", "Marcelo", "Alberto", "Gerardo"); rsort($alumnos); foreach ($alumnos as $key => $val) { echo "alumnos[" . $key . "] = " . $val . ""; }Que daría como respuesta:
alumnos[0] = Pepe
alumnos[1] = Marcelo
alumnos[2] = Juan
alumnos[3] = Gerardo
alumnos[4] = Albertoksort()
También podemos ordenar un array por el índice o llave, que quiere decir que en lugar de ordenar atendiendo a los valores, se ordenaría atendiendo al índice que tienen. Para ver este ejemplo utilizaremos arrays asociativos, que son los que tienen índices de texto en vez de números.
En el array siguiente vemos que tenemos índices como "h", "e", "a", en lugar de números. Lo que hará este tipo de ordenación es fijarse en esos índices para poner el array ordenado por ellos.
<?php //Ordenar arrays por su índice $calles = array("h"=>"Leganitos", "e"=>"Castellana", "a"=>"Bailén", "z"=>"Fuencarral"); ksort($calles); foreach ($calles as $key => $val) { echo $key ." = " . $val . ""; }Esto dará como resultado esta ordenación:
a = Bailén
e = Castellana
h = Leganitos
z = Fuencarralkrsort()
También podemos ordenar por índices pero en sentido inverso. Es decir, por índices pero de mayor a menor.
//ordenar por índice o clave, pero en orden inverso
<?php $calles = array("h"=>"Leganitos", "e"=>"Castellana", "a"=>"Bailén", "z"=>"Fuencarral"); krsort($calles); foreach ($calles as $key => $val) { echo $key ." = " . $val . ""; }En este caso el resultado sería el siguiente:
z = Fuencarral
h = Leganitos
e = Castellana
a = Bailén