Computers">
Nothing Special   »   [go: up one dir, main page]

PHP Avanzado

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 29

PHP Avanzado

[2.1] ¿Cómo estudiar este tema?

[2.2] Estructuras de control con PHP

[2.3] Funciones en PHP

[2.4] Manejo de arrays en PHP

[2.5] Manejo de cadenas con PHP

[2.6] Orientación a objetos en PHP

2
TEMA
Programación con JavaScript

Contenido dinámico en la parte del cliente


Esquema

TEMA 2 – Esquema
Estructuras de control Manejo de arrays en PHP Orientación a objetos en PHP

Estructuras selectivas: Definición Características


if y switch
Tipos: escalares, declarativos
Ámbito: resolución de ámbito
Estructuras iterativas:
while, do…while, for, Declaración: tipos

2
foreach Herencia
Métodos y funciones para
manejo de arrays Sobrecarga de constructores y
Funciones en PHP destructores

Propiedades y objetos estatic


Manejo de cadenas con PHP
Características generales
Clases abstractas
Argumentos Comillas simples y dobles
Clonación de objetos
Uso: palabras clave y
Concatenación
retorno

Funciones para trabajar con


cadenas

© Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web
Computación en el Servidor Web

Ideas clave

2.1. ¿Cómo estudiar este tema?

Para estudiar este tema lee las Ideas clave que encontrarás a continuación.

En este tema vamos a aprender las particularidades del lenguaje PHP relativos a la
programación básica, la sintaxis de PHP para establecer estructuras de control, que
serán los ya conocidos bloques condicionales y los bucles, aprendiendo a manejar las
distintas posibilidades que nos ofrecen.

A continuación, aprenderemos a programar funciones en PHP y repasaremos los


distintos mecanismos de paso de argumentos.

Otra estructura muy importante, ampliamente utilizada para el paso y manejo de


información, son los arrays. Como en otros lenguajes de programación, los arrays nos
permiten organizar información y recorrerla de forma sencilla, por lo que son estructuras
muy potentes que debemos saber manejar con agilidad.

También será de suma importancia, por el hecho de que PHP va a escribir información
en nuestra página web, el manejo de cadenas de caracteres. En este apartado, hemos
incluido distintas funciones que te serán de utilidad para manejar cadenas, que
facilitarán la inclusión y tratamiento de información desde tu código PHP.

Finalmente, trataremos la orientación a objetos en PHP. De nuevo, verás que hay


muchas similitudes con otros lenguajes de programación.

2.2. Estructuras de control en PHP

En PHP tenemos dos tipos de estructuras de control: selectivas e iterativas. Las


primeras, deciden qué parte del código se ejecuta, mientras que las segundas determinan
cuántas veces se ejecuta un código.

TEMA 2 – Ideas clave 3 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Empezaremos por las estructuras de control selectivas: if y switch. De forma


similar a otros lenguajes de programación, una sentencia if determina si el código que
agrupa se ejecutará o no, en función de que se cumpla (o no) la condición indicada.

También permite decidir entre dos grupos de sentencias, indicando qué grupo se ejecuta
cuando se cumple la condición (if) y cual se ejecuta cuando no se cumple (else). Y, por
último, también permite anidar y encadenar los if–else para establecer condiciones más
complejas. A continuación se presenta un ejemplo para mostrar su uso.

<?php
if ($i == 0) {
echo "i es igual a 0";
} elseif ($i == 1) {
echo " i es igual a 1";
} else {
echo "i igual a 2";
}
?>

La otra sentencia de selección es switch, cuyo funcionamiento es similar al encadenado


de distintas sentencias elseif, con la salvedad de que siempre se evalúa la misma
condición: no permite establecer distintas condiciones en cada comprobación, como
ocurre con elseif. Comprenderemos mejor su funcionamiento y la equivalencia con la
estructura anterior con el siguiente ejemplo.

<?php
switch ($i) {
case 0:
echo "i es igual a 0";
break;
case 1:
echo "i es igual a 1";
break;
default:
echo "i es igual a 2";
}
?>

TEMA 2 – Ideas clave 4 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Hay que prestar atención a dos cuestiones importantes en esta sentencia:

» Después de las instrucciones incluidas para cada posible valor (para cada case), hay
que poner un break, para indicar que termina. Si no lo ponemos, aunque empiecen
las sentencias del siguiente case, se seguirán ejecutando. Este comportamiento es
muy útil en algunos casos y por tanto, tiene sentido. No olvides colocarlo siempre que
las instrucciones que incluyen para cada valor de los case sean excluyentes.

» El default final es equivalente a un else. Es decir, si ninguno de los valores de los


case se coincide, ejecutará lo que esté incluido en el default.

El otro grupo de estructuras de control son las iterativas, entre las que encontramos
las siguientes: while, do…while, for y foreach. Todas ellas tienen en común que
ejecutan el código contenido en la estructura un número determinado de veces, que
puede estar determinado por un contador o por algún otro tipo de condición.

Comenzaremos con el while que, en inglés, significa mientras. Por tanto, las sentencias
contenidas en esta estructura se ejecutarán mientras la condición indicada sea cierta.

Hay dos opciones para escribir la sentencia while en PHP. La primera es la que venimos
utilizando en las sentencias de selección, es decir, agrupando las sentencias entre llaves;
la otra, es incluyendo la palabra endwhile para indicar el final del grupo de sentencias
que se ejecutan como parte del while. A continuación, mostramos un ejemplo escrito de
las dos formas posibles, para señalar las diferencias.

<?php
$i = 1;
while ($i <= 10){
echo $i;
$i++;
}

$i = 1;
while ($i <= 10):
echo $i;
$i++;
endwhile;
?>

TEMA 2 – Ideas clave 5 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

La sentencia do…while, aunque es muy similar a esta, tiene una diferencia significativa:
la condición de repetición del bucle se evalúa después de la primera iteración, por lo que
las instrucciones incluidas dentro de esta estructura de control se ejecutarán siempre, al
menos, una vez. Veámoslo con un ejemplo.

<?php
$i = 0;
do{
echo $i;
while ($i > 0); //Lo escribe una vez porque se comprueba después
}
?>

A continuación, comentaremos la sentencia for, que incluye una inicialización del valor
de la variable sobre la que se hará la comprobación, la comprobación de la condición
propiamente dicha y la actualización de la variable. El uso más habitual es que la
condición sea numérica, aunque podemos encontrar algún caso en que se use de otra
forma. Aquí incluimos el mismo ejemplo que realizamos con la estructura while, para
que compruebes las semejanzas y diferencias entre las distintas estructuras.

<?php
for ($i = 0; $i <= 10; $i ++)
echo $i;
?>

Una sentencia similar a esta, pero específicamente diseñada para los arrays, es la
sentencia foreach. Su principal particularidad es que nos permite acceder los elementos
de un array de forma sencilla ya que ofrece dos posibilidades: acceder a los elementos o
acceder a los elementos y los índices. Aunque todavía no hemos hablado de arrays,
presentaremos aquí su sintaxis general, que comprenderás mejor en el siguiente
apartado de este tema.

TEMA 2 – Ideas clave 6 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

<?php
foreach (array as $valor){
grupo_sentencias;
}

foreach (array as $clave => $valor){


grupo_sentencias;
}
?>

Para finalizar este apartado, vamos a comentar las instrucciones break y continue. La
primera permite finalizar la ejecución de una estructura de control iterativa (y de switch)
antes de que se cumpla la condición que la controla. Puede recibir un argumento,
indicando cuántas estructuras de control anidadas debe finalizar. Veamos un ejemplo de
uso.

<?php
$i = 0;
$parar = true;
while ($i <= 10){
echo $i;
$i ++;
if ($parar == true)
break;
}
?>

Por su parte, la sentencia continue omite la ejecución de las sentencias del bucle que
haya por debajo e inicia la siguiente iteración, por ejemplo:

<?php
for ($i = 0; $i <= 10; $i++){
echo $i;
if ($i % 2 == 0)
continue; //No escribe lo de abajo si es par
echo " es impar"."\n";
}
?>

TEMA 2 – Ideas clave 7 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Estas son las estructuras de control más habituales en PHP que, como verás son similares
a las de otros lenguajes de programación. Seguro que no te resulta difícil dominarlas.

2.3. Funciones en PHP

Una función es un conjunto de instrucciones que se agrupan bajo un nombre, de tal


forma que dicho conjunto de instrucciones puede reutilizarse en distintos puntos del
código sin necesidad de reescribirlo.

Cuando definimos una función, permitimos que el conjunto de código contenido en ella
no tenga que escribirse cada vez que se va a utilizar, por lo que nuestros programas son
más ligeros y más fáciles de mantener. Como ya hemos comentado en otros puntos, es
deseable mantener un estilo de programación adecuado que facilite tanto la
revisión posterior de nuestro código como la comprensión del mismo por parte de otro
programador. El uso de funciones, siempre que se realice de forma correcta, contribuye
a este propósito.

En PHP podemos definir funciones utilizando la palabra clave function. A continuación


comentaremos algunas características relevantes de las funciones en PHP:

» Los nombres de las funciones no son sensibles a mayúsculas y minúsculas.


» No es necesario que se definan antes de ser referenciadas.
» Tienen ámbito global. Esto significa que pueden llamarse desde cualquier punto del
código, sin tener en cuenta donde fueron definidas.
» Admite funciones recursivas.

Como sabemos, una función puede tener o no argumentos. Si los tiene, se indican
separados por comas. Cuando definimos la función indicamos los argumentos que se
pasarán y, cuando la llamamos desde el programa principal (o desde otra función),
instanciamos los valores con los que queremos que se ejecute. En PHP, la lista de
argumentos se puede pasar:

» Por valor, anteponiendo $ al nombre de la variable, como es habitual.


» Por referencia, anteponiendo &$ al nombre de la variable.
» Predeterminados, asignando un valor en la definición de la función.

TEMA 2 – Ideas clave 8 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Al final de la función, podremos devolver utilizando la sentencia return. Si no se indica,


el valor que se devuelve por defecto es NULL.

Veamos un ejemplo donde utilizamos estos conceptos:

<?php
function EjemploCompleto ($valor, &$refe, $predet = "dos")
{
$refe = "Juntos, ".$valor. " para ".$predet;
return $predet;
}

$bebida = "café";
$cuantos = EjemploCompleto($bebida, $cad);
echo $cad."\n"; //Escribe “Juntos, café para dos”
echo $cuantos."\n"; //Escribe “dos”

$cad = "";
$cuantos = EjemploCompleto("Té", $cad, "tres");
echo $cad."\n"; //Escribe “Juntos, té para tres”
echo $cuantos."\n"; //Escribe “tres”
?>

En el ejemplo anterior, vemos cómo utilizar la declaración de funciones y su uso, así


como distintas posibilidades que tenemos en el paso de parámetros a funciones.

2.4. Manejo de arrays en PHP

Un array es un conjunto de datos del mismo tipo que se almacenan de forma contigua
en memoria y se acceden mediante un nombre común. Cada uno de los elementos
contenidos en dicha estructura de memoria se accede por medio de un índice. Esta
definición es común para (casi) todos los lenguajes de programación. Sin embargo, PHP
tiene una ventaja adicional: los arrays son muy flexibles, lo cual facilita mucho el manejo
de memoria y permite distintas opciones para crear los índices.

Para declarar una array, solo tendremos que escribir un par de corchetes al final del
nombre de la variable.

TEMA 2 – Ideas clave 9 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

<?php
$var[] = 5; //Crea un array e inserta el número 5
echo $var[0]; //Imprime un 5
?>

Por defecto, los valores se insertan en la posición posterior a la última ocupada y


por defecto, esa posición estará identificada por un número (arrays escalares), que
será el índice. Sin embargo, en PHP se permite que el índice de los arrays sean cadenas
de caracteres, en cuyo caso, el índice deberá especificarse entre comillas. Esta posibilidad
es muy interesante, ya que nos permite simular, de forma muy sencilla, una Tabla Hash.

En el ejemplo siguiente mostramos el uso de índices de cadena (arrays asociativos).

<?php
// Declaramos un vector que almacena el número de veces que se examina
// un alumno del carné de conducir
$var["Pepe"] = 3;
$var["María"] = 2;
?>

Sin embargo, PHP ofrece funciones que nos permiten manejar los arrays de forma
sencilla, ya que nos permiten acceder a sus propiedades y manejar su flexibilidad que
ofrecen. Para ello, utilizaremos el constructor array(), de la siguiente forma:

<?php
$miArray = array ("Antonio", "José", "Alberto");
?>

TEMA 2 – Ideas clave 10 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

El ejemplo anterior, se crea un array con tres elementos, que ocupan las posiciones 0, 1
y 2 del vector respectivamente. No obstante, el constructor array() permite también que
se pasen como argumentos pares (índice, valor), de la siguiente manera:

<?php
$miArray = array (
0 => "Ana",
1 => "María",
5 => "Rosario"
);
?>

En el ejemplo anterior tenemos que prestar atención a lo siguiente:

» El índice y el valor se separan por el conjunto de caracteres =>.


» Hemos incluido los índices 0, 1 y 5. Esto no es un problema en PHP. Podemos dejar
índices sin asignar y no es necesario decir a priori qué cantidad de elementos va a
tener el array. Además, cuando introduzcamos un elemento al final, lo insertará en la
posición 6, que es siguiente a la última registrada.

También se permite que las claves sean mixtas, es decir, que haya índices
numéricos y de cadena de caracteres:

<?php
$otroArray = array (
0 => "Ana",
1 => "María",
"Rosario" => "Charo"
);
?>

Además, PHP permite que los arrays sean multidimensionales, de tal forma que
podemos generar matrices y en general, poliedros, añadiendo dimensiones. Para
declarar arrays multidimensionales, solo tendremos que colocar un par de corchetes
por cada una de las dimensiones que queramos manejar.

TEMA 2 – Ideas clave 11 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

O bien, declararlo mediante el constructor array(), de la siguiente forma:

<?php
$multiArray = array (
0 => array(
0 => "María",
1 => "Charo"
)
);
?>

Además, PHP proporciona un conjunto de funciones muy útiles que nos permiten
acceder a las características. Aunque hay muchas más, aquí destacamos las más
importantes, por su utilidad:

» array_count_values(array $unArray): devuelve un array donde cada valor distinto


encontrado en el argumento, es una clave; cada clave tiene asociado el número de
veces que aparece en el array original.
» array_fill(int $indInicial, int $numPosiciones, mixed $valor): devuelve un
array donde se ha rellenado un conjunto de posiciones (desde $indInicial hasta
$numPosiciones) con el valor indicado ($valor).
» array_fill_keys(array $claves, mixed $valor): devuelve un array donde se ha
rellenado un conjunto de posiciones (las indicadas en $claves) con el valor indicado
($valor).
» array_flip(array $unArray): devuelve un array donde los valores de $unArray pasan
a ser los índices y los índices pasan a ser los valores.
» array_key_exists(mixed $indice, array $unArray): comprueba si el índice que se
pasa como argumento existe en el array $unArray.
» array_keys(array $unArray, mixed $valor, bool $strict=false): Devuelve las
claves numéricas y de tipo String que existan en el array $unArray. Si se especifica el
$valor, solo devuelve las claves que contengan esos valores. Si se especifica el
argumento $strict, indica si debe usarse la comparación estricta.
» array_pop(array $unArray): extrae el último elemento de $unArray.
» array_push(array &$unArray, mixed $value1, …): devuelve el número de elementos
del nuevo array, que se forma concatenando los valores indicados en $value1… al
array $unArray.

TEMA 2 – Ideas clave 12 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

» array_reverse(array $unArray, bool $mantenerClaves=false): devuelve un array


con los elementos de $unArray en orden inverso. Si $mantenerClaves es true, las
claves numéricas se conservan.
» array_search(mixed $valor, array $unArray, bool $strict = false): devuelve la
clave de la primera ocurrencia de $valor en $unArray. Si $strict se fija a true, la
comparación será estricta.
» array_shift(array $unArray): quita el primer elemento de $unArray.
» array_unshift(array $unArray): añade al principio de $unArray uno o más
elementos.
» array_unique(array $unArray): toma $unArray y devuelve uno nuevo sin valores
duplicados.
» array_values(array $unArray): devuelve un array indexado con los valores de
$unArray.
» current($unArray): devuelve el elemento actual de $unArray.
» each(array $unArray) : devuelve el par clave/valor actual de $unArray y avanza el
cursor.
» end(array $unArray): devuelve el último elemento de $unArray y pone el puntero en
dicha posición.
» in_array(mixed $valor, array $unArray, bool $strict = false): comprueba si
$valor existe en $unArray. Usa comparación estricta si $strict = true.
» ksort(array $unArray): ordena $unArray por claves, manteniendo la asociación entre
clave/valor.
» next(array $unArray): avanza el puntero interno de $unArray y devuelve el valor
correspondiente.
» prev(array $unArray): retrocede el puntero interno de $unArray y devuelve el valor
correspondiente.
» sizeof(array $unArray) (o count(array $unArray)): cuenta todos los elementos de
un array.
» sort(array $unArray): ordena $unArray de mayor a menor.

TEMA 2 – Ideas clave 13 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

2.5. Manejo de cadenas con PHP

Las cadenas de caracteres no son más que variables que almacenan textos, donde cada
carácter ocupa un byte. En PHP, las cadenas de caracteres se pueden encerrar entre
comillas simples o dobles, aunque hay una ligera diferencia entre ellas:

» Si se usan comillas simples, el texto incluido se copiará literalmente, atendiendo


solo a dos caracteres de escape: \’, para escapar la comilla simple; y \\, para escapar
la propia barra invertida.
» Si se usan comillas dobles, se interpretan ciertos elementos incluidos en la cadena,
como las variables y un conjunto más amplio de caracteres de escape: \n avance de
línea, \r retorno de carro, \t tabulación horizontal, \v tabulación vertical, \e escape,
\f avance de página, \$ signo de dólar, \’ y \" comillas simples y dobles
respectivamente.

Otra forma de especificar cadenas de caracteres, tal como se explicó en el tema anterior,
es utilizando bloques heredoc.

PHP proporciona un conjunto de operadores que nos permiten trabajar con las
cadenas de texto. Es especialmente importante el operador de concatenación, que en este
lenguaje se especifica con un ".". También se puede acceder a un carácter particular de
la cadena mediante el uso de llaves {}, utilizando el índice de la posición que ocupan, de
forma similar a como se haría en un array.

Sin embargo, al igual que ocurría con los arrays, PHP proporciona funciones para
trabajar con las cadenas de forma sencilla. Tal como hicimos en el apartado anterior,
a continuación destacamos las funciones más útiles para el trabajo de cadenas en PHP:

» chr(int $ascii): devuelve una cadena con el carácter especificado en $ascii.


» ord(string $unaCadena): devuelve el código ASCII del primer carácter de la cadena.
» ltrim(string $unaCadena) : quita los espacios en blanco (y algunos de los caracteres
de escape) del principio de $unaCadena.
» rtrim(string $unaCadena) : quita los espacios en blanco (y algunos de los caracteres
de escape) del final de $unaCadena.
» str_repeat(string $unaCadena, int $num): devuelve una cadena con el contenido
de $unaCadena, repetido $num veces.

TEMA 2 – Ideas clave 14 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

» str_replace(string $buscar, string $reemplazar, string $unaCadena): devuelve


una cadena de caracteres con el contenido de $unaCadena, donde todas las apariciones
de $buscar has sido reemplazadas por el valor indicado en $reemplazar.
» strcmp(string $cad1, string $cad2): compara estrictamente las dos cadenas
especificadas en $cad1 y $cad2. Devuelve <0 si $cad1 es menor que $cad2; >0 si $cad2
es menor que $cad1; 0, si son iguales.
» strip_tags(string $unaCadena, string $noQuitar): devuelve una cadena donde se
han eliminado todas las etiquetas HTML y PHP de $unaCadena, salvo las especificadas,
opcionalmente, en $noQuitar.
» stripslashes(string $unaCadena): devuelve una cadena donde se han eliminado las
barras de escape de $unaCadena.
» strlen(string $unaCadena): devuelve la longitud de $unaCadena.
» strtolower(string $unaCadena): devuelve una cadena donde todos los caracteres de
$unaCadena están en minúscula.
» strtoupper(string $unaCadena): devuelve una cadena donde todos los caracteres de
$unaCadena están en mayúscula.
» ucfirst(string $unaCadena): devuelve una cadena donde se ha convertido el primer
carácter de $unaCadena en mayúscula.
» ucwords(string $unaCadena): devuelve una cadena donde se ha convertido el primer
carácter de todas las palabras de $unaCadena en mayúscula.
» substr(string $unaCadena, int $inicio, int $longitud): devuelve una subcadena
de $unaCadena, tal que:
o Si $inicio es positivo, comienza en la posición indicada en dicho parámetro.
o Si $inicio es negativo, la posición de inicio se contará desde el final de la cadena.
o Si la longitud de $unaCadena es menor que $inicio, devuelve FALSE.
o Si se especifica el parámetro $longitud y este es positivo, este será el número
máximo de caracteres que tendrá la cadena devuelta.
o Si se especifica el parámetro $longitud y este es negativo, ese número de caracteres
se omite al final de la cadena.
o Si se especifica el parámetro $longitud y este es 0, FALSE o NULL, se devuelve una
cadena vacía.

Seguro que estas funciones te resultarán muy útiles cuando trabajes con cadenas de
texto. Si necesitas hacer alguna operación que no aparece en este listado, revisa los
siguientes enlaces ya que solo hemos puesto aquí las más utilizadas, pero hay otras
muchas muy específicas que te pueden ayudar en problemas concretos.

TEMA 2 – Ideas clave 15 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Puedes ampliar esta información, ver más ejemplos y ampliar dudas el aula virtual o en
las siguientes direcciones web:
http://php.net/manual/es/language.types.string.php
http://php.net/manual/es/book.strings.php

2.6. Orientación a objetos en PHP

Puedes ampliar esta información, ver más ejemplos y despejar dudas a través del aula
virtual o desde la siguiente página web:
http://php.net/manual/es/language.oop5.php

El uso de clases en PHP, como en cualquier otro entorno, permite obtener un conjunto
de ventajas que dan mayor calidad a nuestro código y lo hacen más fácilmente
mantenible y reutilizable. Además, si colocamos nuestras clases en un mismo fichero, o
bien, en distintos ficheros agrupadas según algún criterio, permitimos que nuestro
código sea, además, más legible.

Para definir una clase en PHP se utiliza la palabra reservada class, seguida del nombre
que vamos a dar a dicha clase y un conjunto de variables, constantes y funciones, que
estarán contenidas entre un par de llaves. A las variables y constantes las llamaremos
propiedades; a las funciones, métodos.

<?php
class ClaseEjemplo{
//Aquí van las propiedades
public $propiedad1 = "Primera propiedad";
public $propiedad2 = "Segunda propiedad";

//Aquí van los métodos


public function getPropiedad1(){
return $this-> propiedad1;
}
}
?>

TEMA 2 – Ideas clave 16 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Del ejemplo anterior, vamos a destacar algunas cuestiones:

» Las propiedades se han declarado de ámbito público, por lo que podrían accederse
sin necesidad de usar un método para ello. Si se declaran de ámbito protegido
(protected), solo pueden accederse desde la propia clase, las clases que heredan de
ella o la clase de la que hereda la clase que las define. Finalmente, si se declaran de
ámbito privado (private), solo pueden ser accedidas desde la clase donde se
definen.
» La función getPropiedad1() devuelve el valor de la propiedad $propiedad1 por medio
de la pseudo-variable $this. Siempre utilizaremos esta pseudo-variable de la misma
forma: antecedida por $ y seguida por ->.

También podemos definir constantes para una clase. La diferencia con las propiedades
es que no se anteceden del símbolo del dólar para declararlas ni utilizarlas. Y es habitual
darles nombres escritos en mayúscula.

Por otra parte, como es habitual en otros lenguajes de programación orientados a


objetos, para crear una instancia (objeto) de una clase, utilizaremos la palabra reservada
new.

<?php
$objetoEjemplo = new ClaseEjemplo();
?>

Es importante comentar que, desde PHP 5, los objetos se tratan como referencias,
es decir, cuando se asigna un objeto a una variable, no se hace una copia del objeto, sino
que se asigna su referencia.

PHP también soporta herencia y se implementa utilizando la palabra reservada extends


en la declaración de la clase. Una clase que hereda de otra, recibe todos los métodos
públicos y protegidos. Como en otros lenguajes de programación, los métodos de la clase
madre pueden sobrescribirse, si se implementan otros en la clase hija que tengan el
mismo nombre, salvo que se hayan declarado como final. Para acceder a los métodos
de la clase madre, utilizamos la palabra reservada parent:: (el operador :: se denomina
de resolución de ámbito y puede usarse en otras circunstancias que lo requieran).

TEMA 2 – Ideas clave 17 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

<?php
class OtraClaseEjemplo extends ClaseEjemplo{
public $propiedad3 = "Propiedad añadida";

//Sobreescribimos el método de la clase padre


public function getPropiedad1(){
echo "Estoy en la clase hija";
parent::getPropiedad1();
}
}
?>

También es importante mencionar que tanto los constructores como los destructores
pueden sobrecargarse para forzar, por ejemplo, una inicialización antes de usar un
objeto, o viceversa.

Para sobrecargar un constructor (se llamará cuando se haga un new de la clase en


cuestión), utilizaremos:

<?php
class unaClase{
function __construct(){
//Se hace algo...
}
}
?>

De forma similar, sobrecargamos el destructor de una clase:

<?php
class unaClase{
function __destruct(){
//Se hace algo...
}
}
?>

TEMA 2 – Ideas clave 18 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Algunas propiedades y objetos pueden declararse como static, lo cual significa que
pueden accederse sin necesidad de instanciar la clase. Estas propiedades tienen
algunas particularidades, derivadas del hecho de que no necesitan utilizarse por medio
de un objeto:

» Solo se pueden inicializar con un string literal o una constante, no con una expresión.
Esto implica que no se pueden inicializar con una variable o el valor devuelto por una
función.
» No pueden ser accedidas desde un objeto utilizando el operador ->, tal como hacíamos
con sus propiedades.

En PHP también podemos definir clases abstractas, lo cual implica que no pueden
instanciarse hasta que no se implemente sus métodos en las sub-clases (las que
heredan). En esta definición de los métodos abstractos, es necesario tener en cuenta la
visibilidad de los mismos, ya que hay que conservar la definición de la super-clase (la
clase madre); tienen que tener la misma visibilidad u otra menos restrictiva, nunca más
restrictiva que en el método abstracto.

Para definir una clase o un método como abstracta, utilizaremos la palabra reservada
abstract antes de class.

<?php
abstract class ClaseAbstracta{
abstract protected function unMetodo();
abstract public function otroMetodo();

public function getPropiedad1(){


echo "Estoy en la clase hija";
parent::getPropiedad1();
}
}
?>

Para finalizar, comentaremos la clonación de objetos. Como dijimos al principio de la


sección, desde PHP 5, la asignación de objetos se realiza mediante sus referencias. Sin
embargo, hay ocasiones en que podemos necesitar tener copias diferentes, para lo que es
importante conocer las posibilidades que PHP nos ofrece en ese sentido. En particular,
tenemos la opción de clonar los objetos. Se hace mediante la palabra reservada clone,

TEMA 2 – Ideas clave 19 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

que llamará al __clone() del objeto, si es posible. Si no, realizará una copia de las
propiedades del objeto. Esto puede ser un problema si nuestro objeto tiene referencias,
ya que el nuevo objeto copiará esas mismas referencias y por tanto, ambas instancias
trabajarán sobre la misma referencia. En estos casos, será necesario definir nuestro
propio __clone(), que realizará algunas tareas que requieran un tratamiento especial no
contemplado en el método de clonación por defecto. A continuación presentamos un
ejemplo.

<?php
class unaClase
{
static $nInstancias = 0;
public $instancia;

public function __construct() {


$this->instancia = ++self::$nInstancias;
}

public function __clone() {


$this->instancia = ++self::$nInstancias;
}
}

class ClaseClonable
{
public $objeto1;
public $objeto2;

function __clone()
{
//Para que no haga referencia al mismo objeto
$this->objecto1 = clone $this->objecto1;
}
}

$obj = new ClaseClonable();

$obj->objeto1 = new unaClase();


$obj->objeto2 = new unaClase();

$obj2 = clone $obj;


?>

El resultado de este ejemplo sería el siguiente (este y otros ejemplos pueden encontrarse
en la página web indicada al principio de este apartado):

Contenido de $obj:
$obj.objeto1.instancia = 1
$obj.objeto2.instancia = 2

TEMA 2 – Ideas clave 20 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Contenido de $obj2 (objeto clonado):


$obj2.objeto1.instancia = 3
$obj2.objeto2.instancia = 2

En la primera parte de este ejemplo, creamos un objeto de la clase ClaseClonable, que


contiene dos objetos de la clase UnaClase. A cada uno de estos objetos se les asigna un
número de instancia distinto (el 1 y el 2).

A continuación, se clona el objeto $obj en $obj2, de tal forma que:

» objeto1 de $obj2 es uno distinto del objeto1 de $obj, por lo que tiene un número
nuevo de instancia
» objeto2, al no aparecer en el método de clonación de la clase ClaseClonable, es el
mismo que el de $obj, por lo que tiene su mismo número de instancia, es decir, el 2.

TEMA 2 – Ideas clave 21 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Lo + recomendado

No dejes de ver…

Clases en PHP

En el vídeo que te proponemos a continuación es un ejemplo de uso de varios de los


conceptos que hemos aprendido hasta ahora. En concreto, verás el uso de métodos
estáticos, del operador de ámbito, del uso de funciones o de la inclusión de código desde
un fichero externo.

Puedes acceder al vídeo a través del aula virtual o desde la siguiente dirección:
https://www.youtube.com/watch?v=rP-hyl9Jh3Q

TEMA 2 – Lo + recomendado 22 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

+ Información

A fondo

Funciones variables

Php. Funciones variables. Manual de PHP [en línea]. [fecha de consulta: 1 Septiembre
2015].

En el apartado 2.3. hemos hablado de funciones. Con objeto de introducir una visión
general de cómo funciona el lenguaje PHP, se han presentado los conceptos más
importantes de cada uno de los ítems. Sin embargo, PHP permite lo que se conoce como
funciones variables, lo cual permite asignar a variables el nombre de la función que
quieres utilizar. Es una opción que te puede resultar interesante. Puedes ver en qué
consiste y cómo se usa en el siguiente manual.

Accede al manual a través del aula virtual o desde de la siguiente dirección web:
http://php.net/manual/es/functions.variable-functions.php

Funciones de Clases/Objetos

Php. Funciones de Clases/Objetos. Manual de PHP [en línea]. [fecha de consulta: 1


Septiembre 2015].

En PHP hay algunas funciones que se definen sobre los propios objetos y clases, que nos
dan información sobre las clases que hemos definido, sus métodos, las interfaces, etc. Es
un conjunto de funciones que nos dan acceso a meta-información que, en ocasiones,
puede resultar muy útil.

Accede al manual a través del aula virtual o desde de la siguiente dirección web:
http://php.net/manual/es/ref.classobj.php

TEMA 2 – + Información 23 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Enlaces relacionados

PHP a fondo

En estos primeros temas, hemos dado una visión general de los elementos básicos del
lenguaje PHP. Sin embargo, siempre necesitamos alguna función adicional o una visión
distinta de cómo hacer algo que se nos está resistiendo. Con objeto de facilitarte la labor
en estas situaciones, pensamos que el enlace que te proponemos te puede ayudar, ya que
presenta un conjunto de secciones, muy bien estructuradas, que te permiten encontrar
fácilmente los contenidos que necesitas. Seguro que te será de utilidad en tus desarrollos.

Accede la página web a través del aula virtual o desde de la siguiente dirección web:
http://www.desarrolloweb.com/php/

Funciones parte 3

Es posible que tengas algunas dificultades para entender las diferencias entre el paso de
parámetros por valor, por referencia y por defecto. A continuación, te dejamos un enlace
donde puedes recordar, de forma sencilla y con ejemplos, las diferencias entre cada una
de estas formas de paso de argumentos.

Accede a la página web a través del aula virtual o desde de la siguiente dirección web:
http://www.aulafacil.com/cursos/l19305/informatica/programacion/php-
basico/funciones-parte-3-parametros-por-valor-por-referencia-y-por-defecto

TEMA 2 – + Información 24 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Bibliografía

Aristizábal Martínez, D. A. (2012). PHP básico y práctico. Colombia: Editorial ITM.

TEMA 2 – + Información 25 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Actividades

Trabajo: Desarrollo web avanzado

Descripción del trabajo

En esta actividad se propone desarrollar una página web en PHP de temática libre. El
desarrollo se hará poniendo en práctica los conceptos estudiados en los dos primeros
temas. Por tanto, los requisitos mínimos serían los siguientes:

» Una estructura de control de cada tipo que hemos estudiado.


» Una función.
» Un array o matriz.
» Uso de alguna función de cadenas (ver apartado 2.5 del Tema 2).

Como se indica, la temática será libre. No obstante, se valorará positivamente la


usabilidad de la página web. También sería interesante que sea pensada para ser
extendida posteriormente con el resto de los conceptos que se vayan estudiando en la
asignatura.

Para realizar el desarrollo de la web, se puede utilizar un editor de texto,


preferentemente, con resaltado sintáctico.

Entrega del trabajo

Se deberá entregar un máximo de dos ficheros en los que se incluya el código que
implementa los requisitos indicados en el enunciado. También se debe incluir una
captura de pantalla del resultado de la página web desarrollada, visto en el navegador.

Competencias

CB6- Poseer y comprender conocimientos que aporten una base u oportunidad de ser
originales en el desarrollo y/o aplicación de ideas, a menudo en un contexto de
investigación.

TEMA 2 – Actividades 26 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

CB10- Que los estudiantes posean las habilidades de aprendizaje que les permitan
continuar estudiando de un modo que habrá de ser en gran medida autodirigido o
autónomo.

CE3- Capacidad para analizar las necesidades de información que se plantean en un


entorno y llevar a cabo en todas sus etapas el proceso de construcción de un sistema de
información.
CE10- Capacidad para diseñar, desarrollar, gestionar, distribuir y evaluar aplicaciones y
contenidos basados en la Web.

CE15- Conocer, comprender, seleccionar y utilizar los lenguajes, protocolos y tecnologías


estándares, así como las plataformas de desarrollo tanto comerciales como de dominio
público.

CT4- Adquirir la capacidad de trabajo independiente, impulsando la organización y


favoreciendo el aprendizaje autónomo.

TEMA 2 – Actividades 27 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

Test

1. Las estructuras de control en PHP:


A. Se clasifican en iterativas y selectivas.
B. Son, básicamente, bloques condicionales y bucles.
C. Las dos anteriores son correctas.

2. Los bucles que en todos los casos ejecutan una vez el código que incluyen son:
A. Los do…while.
B. Los while.
C. Los foreach.

3. La principal diferencia entre un bucle for y un bucle foreach es:


A. Que los primeros utilizan una condición numérica y los segundos no.
B. Que los segundos están específicamente diseñados para arrays.
C. No hay diferencias entre ellos.

4. Las funciones pueden recibir los argumentos de tres formas diferentes:


A. Por valor, anteponiendo $; por referencia, anteponiendo &$; y
predeterminados, asignando un valor por defecto.
B. Por valor, anteponiendo &$; por referencia, anteponiendo $; y
predeterminados, asignando un valor por defecto.
C. Por valor, asignando un valor por defecto; por referencia, anteponiendo &$; y
predeterminados, anteponiendo $.

5. Los elementos de un array:


A. Son siempre del mismo tipo.
B. Pueden tener índices numéricos o cadenas de caracteres.
C. Las dos anteriores son correctas.

6. En PHP, las cadenas de caracteres:


A. Escritas con comillas dobles, permiten interpretar las variables.
B. Escritas con comillas dobles, solo escapan la comilla simple y la barra invertida.
C. Las dos anteriores son correctas.

TEMA 2 – Test 28 © Universidad Internacional de La Rioja (UNIR)


Computación en el Servidor Web

7. La concatenación de cadenas en PHP:


A. Se realiza con el carácter +
B. Se realiza con el carácter.
C. Se realiza con los caracteres + y . indistintamente.

8. El ámbito de las variables y los métodos de las clases se define como:


A. Público, si se puede acceder desde cualquier punto del código.
B. Protegido, si no se puede acceder desde fuera de la clase donde se define.
C. Las dos anteriores son correctas.

9. Los objetos en PHP se manejan como:


A. Variables por valor.
B. Variables por referencia.
C. Depende de la forma en que se escriban.

10. Las clases abstractas:


A. Solo se pueden instanciar con objetos abstractos.
B. No se pueden instanciar hasta que una super-clase define los métodos.
C. No se pueden instanciar hasta que una sub-clase implementa los métodos.

TEMA 2 – Test 29 © Universidad Internacional de La Rioja (UNIR)

También podría gustarte