SlideShare una empresa de Scribd logo
1 de 12
Guía Práctica Desarrollo Web con PHP 5 y
MySQL/Capítulo 4: PHP orientado a
objetos
Funciones y parámetros
Una función es un fragmento de código agrupado bajo un mismo nombre, que tiene este
aspecto:
function nombre ([lista de parámetros]){
instrucciones
}
Podemos crear nuestras propias funciones. En primer lugar, hemos de declarar la lista de
parámetros que recibirá la función. Éste es un sencillo ejemplo:
function par_impar($numero){
if($numero % 2 == 0){
print('par');
}else{
print('impar');
}
}
Se trata de una función que, dado un número, escribr una cadena de texto diciendo si el
número es par o impar. Podemos utilizarla asi:
<?php
function par_impar($numero){
if($numero % 2 == 0){
printf('par');
}else{
print('impar');
}
}
par_impar(7);
?>
Los parámetros pueden pasarse por valor y por referencia. La primera es la opción
predeterminada: la función recibe una copia del parámetro pasado, así que aunque sea
modificado dentro de la función dicho cambio sólo tendrá efecto dentro del cuerpo de la
función. Por el contrario, si queremos que los parámetros que pasemos a la función puedan
ser modificados, y que esos cambios sobrevivan a la llamada de la función, hemos de
indicarle a PHP que ese parámetro se va a pasar por referencia. El siguiente es un ejemplo
de función en la que los parámetros se pasan por valor:
<?php
function incrementar($numero){
$numero++;
}
$i = 7;
incrementar($i);
print($i);
?>
Como puede comprobar, el incremento no afecta al valor de la variable pasada a la función.
Pero esto cambia si el parámetro se pasa por referencia:
<?php
function incrementar(&$numero){
$numero++;
}
$i = 7;
incrementar($i);
print($i);
?>
Es posible asociar valores predeterminados a los parámetros para los casos en los que no se
pase ningún valor a la función:
<?php
function par_impar($numero){
if($numero % 2 == 0){
printf('par');
}else{
print('impar');
}
}
par_impar();
?>
Si intenta cargar la página anterior, PHP le avisará de que no se ha pasado argumento
alguno a la función. Pero esto puede evitarse con sólo modificar la función:
<?php
function par_impar($numero = 0){
if($numero % 2 == 0){
printf('par');
}else{
print('impar');
}
}
par_impar();
?>
También es posible crear funciones con un número de parámetros variable. Para ello,
hemos de crear una función sin parámetro alguno y luego ayudarnos de las funciones de
PHP func_num_args(), func_get_arg() y func_get_args(). Gracias al uso de estas
funciones podemos crear con mucha facilidad una función que recibe una lista de valo-res y
muestra en la página el resultado de sumarlos todos:
<?php
function sumatorio(){
$parametros = func_num_args();
$res = 0;
for($i = 0; $i < $parametros;$i++){
$res += func_get_arg($i);
}
printf($res);
}
sumatorio(3, 14, 15);
?>
Utilizando la función func_get_args(), que devuelve una matriz con todos los argumentos,
y el bucle foreach podemos simplificar bastante el código:
<?php
function sumatorio(){
foreach(func_get_args() as $param){
$res += $param;
}
printf($res);
}
sumatorio(3, 14, 15);
?>
Publicidad
Devolución de valores en funciones Editar sección
Nada más fácil que conseguir que una función escrita por nosotros devuelva un valor. Sólo
hemos de utilizar la instrucción return. Por ejemplo, podemos cambiar el código de la
función par_impar() que construimos anteriormente. Ahora la fun-ción devolverá TRUE si
el número pasado es par, y FALSE en caso contrario:
function par_impar($numero){
if($numero % 2 == 0){
return TRUE;
}else{
return FALSE;
}
}
El siguiente sería un programa que utilizaria esa función:
<?php
function par_impar($numero){
if($numero % 2 == 0){
return TRUE;
}else{
return FALSE;
}
}
if(par_impar(7) == TRUE){
print('par');
}else{
print('impar');
}
?>
Trabajando con funciones Editar sección
Ejecute el siguiente código SQL para crear la base de datos videoteca y la tabla genero e
insertar los valores iniciales:
DROP DATABASE IF EXISTS videoteca;
CREATE DATABASE videoteca;
USE videoteca;
CREATE TABLE genero (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
nombre VARCHAR(2) NOT NULL,
descripcion VARCHAR(32) NOT NULL,
PRIMARY KEY(id)
);
INSERT INTO genero(nombre,descripcion)
VALUES('CF','Ciencia Ficción');
INSERT INTO genero(nombre,descripcion)
VALUES('A','Aventuras');
INSERT INTO genero(nombre,descripcion)
VALUES('D','Drama');
INSERT INTO genero(nombre,descripcion)
VALUES('T','Terror');
La siguiente página PHP cargará el contenido de la tabla que acabamos de crear y mostrará
su contenido:
<?php
$conexion = mysqli_connect(
'localhost',
'root',
'clave',
'videoteca'
);
if ($conexion == FALSE){
echo('Error en la conexión.');
exit();
}
$res = mysqli_query(
$conexion,
'SELECT * FROM genero'
);
if ($res == FALSE){
echo('Error en la consulta.');
mysqli_close($conexion);
exit();
}
?>
<table border="1">
<tr>
<th>id</th>
<th>nombre</th>
<th>descripcion</th>
</tr>
<?php
while($fila = mysqli_fetch_row($res)){
printf('<tr>');
printf(
"<td>%u</td><td>%s</td><td>%s</td>",
$fila[0], $fila[1], $fila[2]
);
printf('</tr>');
}
?>
</table>
<?php
mysqli_free_result($res);
mysqli_close($conexion);
?>
Si se fija en el listado de la página podrá comprobar que el código PHP está muy mezclado
con el código HTML. Ha sido necesario escapar de PHP en varias ocasiones. ¿No sería
mucho más cómodo disponer de todo el código que se encarga de obtener el listado de
géneros agrupado? Un primer intento podría ser algo así:
<?php
$conexion = mysqli_connect(
'localhost',
'root',
'clave',
'videoteca'
);
if ($conexion == FALSE){
echo('Error en la conexión.');
exit();
}
$res = mysqli_query(
$conexion,
'SELECT * FROM genero'
);
if ($res == FALSE){
echo('Error en la consulta.');
mysqli_close($conexion);
exit();
}
while($fila = mysqli_fetch_row($res)){
$generos .= '<tr>';
$generos .= sprintf(
"<td>%u</td><td>%s</td><td>%s</td>",
$fila[0], $fila[1], $fila[2]
);
$generos .= sprintf('</tr>');
}
mysqli_free_result($res);
mysqli_close($conexion);
?>
<table border="1">
<tr>
<th>id</th>
<th>nombre</th>
<th>descripcion</th>
</tr>
<?php
print($generos);
?>
</table>
El resultado es el mismo que se obtuvo en el ejemplo anterior, aunque el código está algo
más ordenado, con dos bloques: uno con PHP y otro con HTML. ¿Qué nos impide ubicar
todo el código PHP en una única función que devuelva como resultado una cadena de texto
con todos los géneros cinematográficos, en filas para insertar en una tabla? Por ejemplo,
así:
Inclusión de archivos Editar sección
Vamos a crear un nuevo archivo PHP cuyo contenido será única y exclusivamente la
función de carga de géneros que creamos en la sección anterior. Ese archivo podría
llamarse generos.php:
<?php
function cargar_generos(){
$conexion = mysqli_connect(
'localhost',
'root',
'clave',
'videoteca'
);
if ($conexion == FALSE){
echo('Error en la conexión.');
exit();
}
$res = mysqli_query(
$conexion,
'SELECT * FROM genero'
);
if ($res == FALSE){
echo('Error en la consulta.');
mysqli_close($conexion);
exit();
}
while($fila=mysqli_fetch_row($res)){
$generos .= '<tr>';
$generos .= sprintf(
"<td>%u</td><td>%s</td><td>%s</td>",
$fila[0], $fila[1], $fila[2]
);
$generos .= sprintf('</tr>');
}
mysqli_free_result($res);
mysqli_close($conexion);
return $generos;
}
?>
A continuación, crearemos un segundo archivo PHP con el siguiente contenido:
<?php
include 'generos.php';
?>
<table border="1">
<tr>
<th>id</th>
<th>nombre</th>
<th>descripcion</th>
</tr>
<?php
print(cargar_generos());
?>
</table>
Cuando PHP analiza el archivo para saber qué tiene que hacer cuando alguien le pide esa
página, encuentra la instrucción include. Entonces busca el archivo indicado a continuación
y lo incluye en la página actual, como si efectivamente estuviese escrito en la página.
Orientación a objetos Editar sección
Podemos definir una clase como la plantilla utilizada para crear un objeto. En una clase se
definen las propiedades y los métodos de los objetos creados a partir de ella. Vamos a crear
una que llamaremos generos.cls.php y que realizará la operación de carga de todos los
generos. Su código es el siguiente:
<?php
class clsGeneros{
var $Ordenada = False;
function Cargar(){
$conexion = mysqli_connect(
'localhost',
'root',
'clave',
'videoteca'
);
if ($conexion == FALSE){
echo('Error en la conexión.');
exit();
}
if($this->Ordenada == TRUE){
$res = mysqli_query(
$conexion,
'SELECT * FROM genero '.
'ORDER BY nombre'
);
}else{
$res = mysqli_query(
$conexion,
'SELECT * FROM genero'
);
}
if ($res == FALSE){
echo('Error en la consulta.');
mysqli_close($conexion);
exit();
}
while($fila=mysqli_fetch_row($res)){
$generos .= '<tr>';
$generos .= sprintf(
"<td>%u</td><td>%s</td><td>%s</td>",
$fila[0], $fila[1], $fila[2]
);
$generos .= sprintf('</tr>');
}
mysqli_free_result($res);
mysqli_close($conexion);
return $generos;
}
}
?>
Este archivo será incluido en aquellos programas que quieran utilizar la clase. Por ejemplo,
en éste:
<?php
require 'generos.cls.php';
$oGeneros = new clsGeneros;
$oGeneros->Ordenada = TRUE;
$sGeneros = $oGeneros->Cargar();
?>
<table border="1">
<tr>
<th>id</th>
<th>nombre</th>
<th>descripción</th>
</tr>
<?php
print($sGeneros);
?>
</table>
Usando la clase que hemos creado, el siguiente programa es perfectamente válido:
<?php
require 'generos.cls.php';
$oGeneros1 = new clsGeneros;
$oGeneros2 = new clsGeneros;
$oGeneros1->Ordenada = TRUE;
$oGeneros2->Ordenada = FALSE;
$sGeneros1 = $oGeneros1->Cargar();
$sGeneros2 = $oGeneros2->Cargar();
?>
<table><tr><td>
<table border="1">
<tr>
<th>id</th>
<th>nombre</th>
<th>descripción</th>
</tr>
<?php
print($sGeneros1);
?>
</table>
</td><td>
<table border="1">
<tr>
<th>id</th>
<th>nombre</th>
<th>descripción</th>
</tr>
<?php
print($sGeneros2);
?>
</table>
</td></tr></table>
Constructores Editar sección
Dentro de una clase, el constructor es un método especial que se ejecuta siempre que se
crea un ejemplar de dicha clase. El nombre de ese método especial debe ser el mismo que el
de la clase:
var $Ordenada;
...
function clsGeneros(){
$this->Ordenada = TRUE;
}
Hemos movido la asignación de un valor inicial a $Ordenada de la declaración al
constructor. Ahora, el comportamiento predeterminado del método de carga será devolver
la lista de géneros ordenada. Como si de un método normal y corriente se tratase, podemos
definir una lista de argumentos que el constructor puede recibir. Sería interesante que
recibiese si que-remos o no la lista de géneros ordenada:
function clsGeneros($fOrdenada){
$this->Ordenada = $fOrdenada;
}
Al crear el ejemplar de la clase indicaremos si queremos ordenación o no:
$oGeneros = new clsGeneros(TRUE);

Más contenido relacionado

La actualidad más candente (19)

Php
PhpPhp
Php
 
Funcionesphpmysql
FuncionesphpmysqlFuncionesphpmysql
Funcionesphpmysql
 
Tema2 3
Tema2 3Tema2 3
Tema2 3
 
Php
PhpPhp
Php
 
3 curso php
3 curso php3 curso php
3 curso php
 
Taller listasyeasygui
Taller listasyeasyguiTaller listasyeasygui
Taller listasyeasygui
 
32773 php-basico
32773 php-basico32773 php-basico
32773 php-basico
 
Ejemplo de formulario
Ejemplo de formularioEjemplo de formulario
Ejemplo de formulario
 
PHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básicoPHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básico
 
Introducción a PHP
Introducción a PHPIntroducción a PHP
Introducción a PHP
 
Ensayo iv
Ensayo ivEnsayo iv
Ensayo iv
 
Clases de php
Clases de phpClases de php
Clases de php
 
Perl5 hashes
Perl5 hashesPerl5 hashes
Perl5 hashes
 
Informe grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuencaInforme grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuenca
 
Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
Desymfony 2011 - Twig
Desymfony 2011 - TwigDesymfony 2011 - Twig
Desymfony 2011 - Twig
 
Php
PhpPhp
Php
 
Sesiones en Php
Sesiones en  PhpSesiones en  Php
Sesiones en Php
 

Destacado

SQL Injection Joinea 2010
SQL Injection Joinea 2010SQL Injection Joinea 2010
SQL Injection Joinea 2010magnobalt
 
Seguridad en el Desarrollo de Aplicaciones Web PHP
Seguridad en el Desarrollo de Aplicaciones Web PHPSeguridad en el Desarrollo de Aplicaciones Web PHP
Seguridad en el Desarrollo de Aplicaciones Web PHP7th_Sign
 
Seminario Seguridad con PHP
Seminario Seguridad con PHPSeminario Seguridad con PHP
Seminario Seguridad con PHPNazareno Lorenzo
 
Desarrollo rápido con PHP y Symfony (VI): Los formularios
Desarrollo rápido con PHP y Symfony (VI): Los formulariosDesarrollo rápido con PHP y Symfony (VI): Los formularios
Desarrollo rápido con PHP y Symfony (VI): Los formulariosDavid J. Brenes
 
Tutorial Web Services en PHP, REST, SOAP
Tutorial Web Services en PHP, REST, SOAPTutorial Web Services en PHP, REST, SOAP
Tutorial Web Services en PHP, REST, SOAPElwin Huaman
 
Gestion de formularios php
Gestion de formularios phpGestion de formularios php
Gestion de formularios phpwilliamCG27
 

Destacado (8)

SQL Injection Joinea 2010
SQL Injection Joinea 2010SQL Injection Joinea 2010
SQL Injection Joinea 2010
 
Seguridad en el Desarrollo de Aplicaciones Web PHP
Seguridad en el Desarrollo de Aplicaciones Web PHPSeguridad en el Desarrollo de Aplicaciones Web PHP
Seguridad en el Desarrollo de Aplicaciones Web PHP
 
Web Services
Web ServicesWeb Services
Web Services
 
Seminario Seguridad con PHP
Seminario Seguridad con PHPSeminario Seguridad con PHP
Seminario Seguridad con PHP
 
Seguridad en PHP (es)
Seguridad en PHP (es)Seguridad en PHP (es)
Seguridad en PHP (es)
 
Desarrollo rápido con PHP y Symfony (VI): Los formularios
Desarrollo rápido con PHP y Symfony (VI): Los formulariosDesarrollo rápido con PHP y Symfony (VI): Los formularios
Desarrollo rápido con PHP y Symfony (VI): Los formularios
 
Tutorial Web Services en PHP, REST, SOAP
Tutorial Web Services en PHP, REST, SOAPTutorial Web Services en PHP, REST, SOAP
Tutorial Web Services en PHP, REST, SOAP
 
Gestion de formularios php
Gestion de formularios phpGestion de formularios php
Gestion de formularios php
 

Similar a Guía práctica desarrollo web con php 5 y my sql

Similar a Guía práctica desarrollo web con php 5 y my sql (20)

PHP - MYSQL
PHP - MYSQLPHP - MYSQL
PHP - MYSQL
 
Apuntes php
Apuntes phpApuntes php
Apuntes php
 
Actividad 3 . funciones en php
Actividad 3 . funciones en phpActividad 3 . funciones en php
Actividad 3 . funciones en php
 
Php!
Php!Php!
Php!
 
Manual+php+básico
Manual+php+básicoManual+php+básico
Manual+php+básico
 
tutorial de slide.com
tutorial de slide.comtutorial de slide.com
tutorial de slide.com
 
0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf
 
Php Basico
Php BasicoPhp Basico
Php Basico
 
Php excel
Php excelPhp excel
Php excel
 
Funciones
FuncionesFunciones
Funciones
 
Guia programacionwebbasicophp
Guia programacionwebbasicophpGuia programacionwebbasicophp
Guia programacionwebbasicophp
 
Guia N5 Proyectos Web Consultas Php Y My Sql
Guia N5   Proyectos Web   Consultas Php Y My SqlGuia N5   Proyectos Web   Consultas Php Y My Sql
Guia N5 Proyectos Web Consultas Php Y My Sql
 
4.Programación con PHP y MySQL
4.Programación con PHP y MySQL4.Programación con PHP y MySQL
4.Programación con PHP y MySQL
 
Programacion php
Programacion phpProgramacion php
Programacion php
 
Funciones en php
Funciones en phpFunciones en php
Funciones en php
 
Mysql adodb pdf_php
Mysql adodb pdf_phpMysql adodb pdf_php
Mysql adodb pdf_php
 
Evidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHPEvidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHP
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 

Último

BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 

Último (7)

BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 

Guía práctica desarrollo web con php 5 y my sql

  • 1. Guía Práctica Desarrollo Web con PHP 5 y MySQL/Capítulo 4: PHP orientado a objetos Funciones y parámetros Una función es un fragmento de código agrupado bajo un mismo nombre, que tiene este aspecto: function nombre ([lista de parámetros]){ instrucciones } Podemos crear nuestras propias funciones. En primer lugar, hemos de declarar la lista de parámetros que recibirá la función. Éste es un sencillo ejemplo: function par_impar($numero){ if($numero % 2 == 0){ print('par'); }else{ print('impar'); } } Se trata de una función que, dado un número, escribr una cadena de texto diciendo si el número es par o impar. Podemos utilizarla asi: <?php function par_impar($numero){ if($numero % 2 == 0){ printf('par'); }else{ print('impar'); } } par_impar(7); ?> Los parámetros pueden pasarse por valor y por referencia. La primera es la opción predeterminada: la función recibe una copia del parámetro pasado, así que aunque sea modificado dentro de la función dicho cambio sólo tendrá efecto dentro del cuerpo de la
  • 2. función. Por el contrario, si queremos que los parámetros que pasemos a la función puedan ser modificados, y que esos cambios sobrevivan a la llamada de la función, hemos de indicarle a PHP que ese parámetro se va a pasar por referencia. El siguiente es un ejemplo de función en la que los parámetros se pasan por valor: <?php function incrementar($numero){ $numero++; } $i = 7; incrementar($i); print($i); ?> Como puede comprobar, el incremento no afecta al valor de la variable pasada a la función. Pero esto cambia si el parámetro se pasa por referencia: <?php function incrementar(&$numero){ $numero++; } $i = 7; incrementar($i); print($i); ?> Es posible asociar valores predeterminados a los parámetros para los casos en los que no se pase ningún valor a la función: <?php function par_impar($numero){ if($numero % 2 == 0){ printf('par'); }else{ print('impar'); } } par_impar(); ?> Si intenta cargar la página anterior, PHP le avisará de que no se ha pasado argumento alguno a la función. Pero esto puede evitarse con sólo modificar la función:
  • 3. <?php function par_impar($numero = 0){ if($numero % 2 == 0){ printf('par'); }else{ print('impar'); } } par_impar(); ?> También es posible crear funciones con un número de parámetros variable. Para ello, hemos de crear una función sin parámetro alguno y luego ayudarnos de las funciones de PHP func_num_args(), func_get_arg() y func_get_args(). Gracias al uso de estas funciones podemos crear con mucha facilidad una función que recibe una lista de valo-res y muestra en la página el resultado de sumarlos todos: <?php function sumatorio(){ $parametros = func_num_args(); $res = 0; for($i = 0; $i < $parametros;$i++){ $res += func_get_arg($i); } printf($res); } sumatorio(3, 14, 15); ?> Utilizando la función func_get_args(), que devuelve una matriz con todos los argumentos, y el bucle foreach podemos simplificar bastante el código: <?php function sumatorio(){ foreach(func_get_args() as $param){ $res += $param; } printf($res); }
  • 4. sumatorio(3, 14, 15); ?> Publicidad Devolución de valores en funciones Editar sección Nada más fácil que conseguir que una función escrita por nosotros devuelva un valor. Sólo hemos de utilizar la instrucción return. Por ejemplo, podemos cambiar el código de la función par_impar() que construimos anteriormente. Ahora la fun-ción devolverá TRUE si el número pasado es par, y FALSE en caso contrario: function par_impar($numero){ if($numero % 2 == 0){ return TRUE; }else{ return FALSE; } } El siguiente sería un programa que utilizaria esa función: <?php function par_impar($numero){ if($numero % 2 == 0){ return TRUE; }else{ return FALSE; } } if(par_impar(7) == TRUE){ print('par'); }else{ print('impar'); } ?> Trabajando con funciones Editar sección Ejecute el siguiente código SQL para crear la base de datos videoteca y la tabla genero e insertar los valores iniciales:
  • 5. DROP DATABASE IF EXISTS videoteca; CREATE DATABASE videoteca; USE videoteca; CREATE TABLE genero ( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, nombre VARCHAR(2) NOT NULL, descripcion VARCHAR(32) NOT NULL, PRIMARY KEY(id) ); INSERT INTO genero(nombre,descripcion) VALUES('CF','Ciencia Ficción'); INSERT INTO genero(nombre,descripcion) VALUES('A','Aventuras'); INSERT INTO genero(nombre,descripcion) VALUES('D','Drama'); INSERT INTO genero(nombre,descripcion) VALUES('T','Terror'); La siguiente página PHP cargará el contenido de la tabla que acabamos de crear y mostrará su contenido: <?php $conexion = mysqli_connect( 'localhost', 'root', 'clave', 'videoteca' ); if ($conexion == FALSE){ echo('Error en la conexión.'); exit(); } $res = mysqli_query( $conexion, 'SELECT * FROM genero' ); if ($res == FALSE){ echo('Error en la consulta.'); mysqli_close($conexion); exit(); } ?> <table border="1"> <tr> <th>id</th>
  • 6. <th>nombre</th> <th>descripcion</th> </tr> <?php while($fila = mysqli_fetch_row($res)){ printf('<tr>'); printf( "<td>%u</td><td>%s</td><td>%s</td>", $fila[0], $fila[1], $fila[2] ); printf('</tr>'); } ?> </table> <?php mysqli_free_result($res); mysqli_close($conexion); ?> Si se fija en el listado de la página podrá comprobar que el código PHP está muy mezclado con el código HTML. Ha sido necesario escapar de PHP en varias ocasiones. ¿No sería mucho más cómodo disponer de todo el código que se encarga de obtener el listado de géneros agrupado? Un primer intento podría ser algo así: <?php $conexion = mysqli_connect( 'localhost', 'root', 'clave', 'videoteca' ); if ($conexion == FALSE){ echo('Error en la conexión.'); exit(); } $res = mysqli_query( $conexion, 'SELECT * FROM genero' ); if ($res == FALSE){ echo('Error en la consulta.'); mysqli_close($conexion); exit(); }
  • 7. while($fila = mysqli_fetch_row($res)){ $generos .= '<tr>'; $generos .= sprintf( "<td>%u</td><td>%s</td><td>%s</td>", $fila[0], $fila[1], $fila[2] ); $generos .= sprintf('</tr>'); } mysqli_free_result($res); mysqli_close($conexion); ?> <table border="1"> <tr> <th>id</th> <th>nombre</th> <th>descripcion</th> </tr> <?php print($generos); ?> </table> El resultado es el mismo que se obtuvo en el ejemplo anterior, aunque el código está algo más ordenado, con dos bloques: uno con PHP y otro con HTML. ¿Qué nos impide ubicar todo el código PHP en una única función que devuelva como resultado una cadena de texto con todos los géneros cinematográficos, en filas para insertar en una tabla? Por ejemplo, así: Inclusión de archivos Editar sección Vamos a crear un nuevo archivo PHP cuyo contenido será única y exclusivamente la función de carga de géneros que creamos en la sección anterior. Ese archivo podría llamarse generos.php: <?php function cargar_generos(){ $conexion = mysqli_connect( 'localhost', 'root', 'clave', 'videoteca' ); if ($conexion == FALSE){
  • 8. echo('Error en la conexión.'); exit(); } $res = mysqli_query( $conexion, 'SELECT * FROM genero' ); if ($res == FALSE){ echo('Error en la consulta.'); mysqli_close($conexion); exit(); } while($fila=mysqli_fetch_row($res)){ $generos .= '<tr>'; $generos .= sprintf( "<td>%u</td><td>%s</td><td>%s</td>", $fila[0], $fila[1], $fila[2] ); $generos .= sprintf('</tr>'); } mysqli_free_result($res); mysqli_close($conexion); return $generos; } ?> A continuación, crearemos un segundo archivo PHP con el siguiente contenido: <?php include 'generos.php'; ?> <table border="1"> <tr> <th>id</th> <th>nombre</th> <th>descripcion</th> </tr> <?php print(cargar_generos()); ?> </table>
  • 9. Cuando PHP analiza el archivo para saber qué tiene que hacer cuando alguien le pide esa página, encuentra la instrucción include. Entonces busca el archivo indicado a continuación y lo incluye en la página actual, como si efectivamente estuviese escrito en la página. Orientación a objetos Editar sección Podemos definir una clase como la plantilla utilizada para crear un objeto. En una clase se definen las propiedades y los métodos de los objetos creados a partir de ella. Vamos a crear una que llamaremos generos.cls.php y que realizará la operación de carga de todos los generos. Su código es el siguiente: <?php class clsGeneros{ var $Ordenada = False; function Cargar(){ $conexion = mysqli_connect( 'localhost', 'root', 'clave', 'videoteca' ); if ($conexion == FALSE){ echo('Error en la conexión.'); exit(); } if($this->Ordenada == TRUE){ $res = mysqli_query( $conexion, 'SELECT * FROM genero '. 'ORDER BY nombre' ); }else{ $res = mysqli_query( $conexion, 'SELECT * FROM genero' ); } if ($res == FALSE){ echo('Error en la consulta.'); mysqli_close($conexion); exit(); } while($fila=mysqli_fetch_row($res)){ $generos .= '<tr>'; $generos .= sprintf(
  • 10. "<td>%u</td><td>%s</td><td>%s</td>", $fila[0], $fila[1], $fila[2] ); $generos .= sprintf('</tr>'); } mysqli_free_result($res); mysqli_close($conexion); return $generos; } } ?> Este archivo será incluido en aquellos programas que quieran utilizar la clase. Por ejemplo, en éste: <?php require 'generos.cls.php'; $oGeneros = new clsGeneros; $oGeneros->Ordenada = TRUE; $sGeneros = $oGeneros->Cargar(); ?> <table border="1"> <tr> <th>id</th> <th>nombre</th> <th>descripción</th> </tr> <?php print($sGeneros); ?> </table> Usando la clase que hemos creado, el siguiente programa es perfectamente válido: <?php require 'generos.cls.php'; $oGeneros1 = new clsGeneros; $oGeneros2 = new clsGeneros; $oGeneros1->Ordenada = TRUE; $oGeneros2->Ordenada = FALSE;
  • 11. $sGeneros1 = $oGeneros1->Cargar(); $sGeneros2 = $oGeneros2->Cargar(); ?> <table><tr><td> <table border="1"> <tr> <th>id</th> <th>nombre</th> <th>descripción</th> </tr> <?php print($sGeneros1); ?> </table> </td><td> <table border="1"> <tr> <th>id</th> <th>nombre</th> <th>descripción</th> </tr> <?php print($sGeneros2); ?> </table> </td></tr></table> Constructores Editar sección Dentro de una clase, el constructor es un método especial que se ejecuta siempre que se crea un ejemplar de dicha clase. El nombre de ese método especial debe ser el mismo que el de la clase: var $Ordenada; ... function clsGeneros(){ $this->Ordenada = TRUE; } Hemos movido la asignación de un valor inicial a $Ordenada de la declaración al constructor. Ahora, el comportamiento predeterminado del método de carga será devolver la lista de géneros ordenada. Como si de un método normal y corriente se tratase, podemos
  • 12. definir una lista de argumentos que el constructor puede recibir. Sería interesante que recibiese si que-remos o no la lista de géneros ordenada: function clsGeneros($fOrdenada){ $this->Ordenada = $fOrdenada; } Al crear el ejemplar de la clase indicaremos si queremos ordenación o no: $oGeneros = new clsGeneros(TRUE);