JTagua

Inicio » PHP » Tipos compuestos

Archivo de la categoría: Tipos compuestos

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();
?>
El $this es una variable impícita o ya definida (construida automáticamente dentro de todos los objetos) que apunta al objeto actual. O en otras palabras, $this es una variable especial de auto-referencia. Se usa $this para acceder a las propiedades y llamar a otros métodos de la clase actual.
Ahora podemos restringir el acceso a las propiedades usando los «modificadores de acceso». Uno de los fundamentos principales de la POO es la «encapsulacion». La idea es que se crea un código mas limpio y mejor, si se restringe el acceso a las estructuras de datos (propiedades) en sus objetos. Puedes restringir acceso a las propiedades de la clase usando algo llamado «modificadores de acceso». Existen 3 modificadores de acceso: Publico, Protegido,Privado

Publico es el modificador por defecto. Significa que si no lo colocas se asume que es Publico.
Cuando se declara una propiedad como «privada» solo la misma clase puede acceder a la propiedad.
Cuando una propiedad es declarada como «protegida» solo la misma clase y las clases derivadas de esta clase pueden acceder a la propiedad.
Las Propiedades declaradas como «publicas» no tienen restricciones de acceso, significa que cualquiera puede acceder a ellas.
Asi como las propiedades, también se puede controlar el acceso a los métodos usando uno de los tres modificadores de acceso: Publico, Protegido, Privado.
Otro ejemplo,
<?
 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.

Constructores
Los constructores son funciones, o métodos, que se encargan de realizar las tareas de inicialización de los objetos al ser instanciados. Es decir, cuando se crean los objetos a partir de las clases, se llama a un constructor que se encarga de inicializar los atributos del objeto y realizar cualquier otra tarea de inicialización que sea necesaria.No es obligatorio disponer de un constructor, pero resultan muy útiles y su uso es muy habitual. En el ejemplo de la caja, que comentábamos mas arriba, lo normal sería inicializar las variables como color o las relacionadas con las dimensiones y, además, indicar que el contenido de la caja está vacío. Si no hay un constructor no se inicializan ninguno de los atributos de los objetos.El constructor se define dentro de la propia clase, como si fuera otro método. El único detalle es que el constructor debe tener el mismo nombre que la clase. Atentos a PHP, que diferencia entre mayúsculas y minúsculas.

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.

Pero en realidad, resulta que este índice es numérico solo por defecto; es decir, tenemos la posibilidad de crear nuestro propio índice dentro de un array. Cuando hacemos esto, estamos convirtiendo el array en lo que se denomina un array asociativo.

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].

Tanto los corchetes como las llaves pueden ser utilizadas de forma indiferente para acceder a elementos de un array (por ejemplo: $array[42] and $array{42} harán lo mismo).
Para cambiar un valor determinado, se debe asignar un nuevo valor a ese elemento con su clave.
Para quitar un par clave/valor, se debe llamar la función unset().

<?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
Juan

Pepe
Juan

array_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
Pablo

La función devuelve: Pepe
Juan
Julio
Pablo

unset()
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 -- Anoeta

Barcelona -- Nou Camp
Valencia -- Mestalla
Real Sociedad -- Anoeta

array_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
Oso

array_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
34

sort()

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] = Pepe

rsort()

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] = Alberto

ksort()

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 = Fuencarral

krsort()

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