Sie sind auf Seite 1von 136

PHP

IT Colima Ene-Jun 2009 1


1. INTRODUCCIÓN:
Diferencias entre ASP y PHP

 Software propietario  Free Software


 Plataformas Microsoft  Multiplataforma
 Varios lenguajes  Un solo lenguaje:
(VBScript, JavaScript) PHP

IT Colima Ene-Jun 2009 2


Que se necesita para que funcione PHP
 Servidor de páginas http
 Versión compilada de PHP
 Editor de Texto
 Si se requiere de manejar bases de datos
MYSQL es el mejor DBMS para PHP

IT Colima Ene-Jun 2009 3


Características de PHP
 Más rápido que ASP

 Lenguaje más fácil y potente


 Integración perfecta con 8 servidores
HTTP
 Acceso a 20 tipos de Bases de Datos
 Diseño modular de fácil ampliación
 Licencia abierta
IT Colima Ene-Jun 2009 4
Historia y Desarrolladores
Fechas
•Inicio del desarrollo en otoño de 1994
•PHP Versión 1 en primavera 1995
•PHP Versión 2 1995-1997
•PHP Versión 3 1997-2000
•PHP Versión 4 en el segundo trimestre de 2000

Equipo de Desarrollo (195 personas con acceso al CVS)


•Zeev Suraski y Andi Gutmans (Israel)
•Shane Caraveo (Florida)
•Stig Bakken (Norway)
•Andrei Zmievski (Lincoln, Nebraska)
•Sascha Schumann (Dortmund, Germany)
•Thies C. Arntzen (Hamburg, Germany)
•Jim Winstead (Los Angeles)
•Sam Ruby (Raleigh, NC)
•Rasmus Lerdorf (San Francisco)
IT Colima Ene-Jun 2009 5
PHP 5
 El 13 de julio de 2004, fue lanzado PHP 5, utilizando el motor Zend
Engine II (o Zend Engine 2). La versión más reciente de PHP es la 5.2.4
(30 de agosto de 2007), que incluye todas las ventajas que provee el
nuevo Zend Engine 2 como:
 Soporte sólido y REAL para Programación Orientada a Objetos ( o OOP)
con PHP Data Objects.
 Mejoras de rendimiento.
 Mejor soporte para MySQL con extensión completamente reescrita.
 Mejor soporte a XML ( XPath, DOM... ).
 Soporte nativo para SQLite.
 Soporte integrado para SOAP.
 Iteradores de datos.
 Excepciones de errores.

IT Colima Ene-Jun 2009 6


PHP 6
 Está previsto el lanzamiento en breve de la rama 6 de PHP,
cuando se lance esta nueva versión, quedarán solo dos ramas
activas en desarrollo (PHP 5 y 6) pues se ha comunicado que
PHP 4 ha sido discontinuado desde el 13 de Julio de 2007.
 Las diferencias que encontraremos frente a PHP 5.* son:
 Soportará Unicode
 Limpieza de funcionalidades obsoletas como register_globals,
safe_mode...
 PECL
 Mejoras en orientación a objetos

IT Colima Ene-Jun 2009 7


Estadísticas de uso

Fuente: Netcraft 3,314,634 Dominios, 637,746 Direcciones IP


Agosto 2000 19,823,296 Dominios analizados
PHP instalado en el 16.7% de todos los dominios
1,322,329 Servidores Apache analizados
429,589 (32.49%) PHP
Fuente: SecuritySpace.com
247,642 (18.73%) Frontpage
Septiembre 2000
133,414 (10.09%) mod_perl
Informe sobre Módulos Apache
111,576 (8.44%) mod_ssl
78,030 (5.90%) OpenSSL
46,404 (3.51%) ApacheJServ
IT Colima Ene-Jun 2009 8
Plataformas soportadas
Plataformas (actualidad): Plataformas (en perparación):
•UNIX (todas las variantes) •OS/390
•Win32 •AS/400
(NT/W95/W98/W2000)
•QNX
•Mac (WebTen)
•OS/2
•BeOS
Servidores: Servidores (en preparación):
•Apache (UNIX,Win32) •Apache 2.0
•CGI •WSAPI (O'Reilly WebSite)
•fhttpd •phttpd
•ISAPI (IIS, Zeus) •thttpd
•NSAPI (Netscape iPlanet)
•Java servlet
•AOLServer
•Roxen
IT Colima Ene-Jun 2009 9
Bases de datos soportadas
SQL Otros
•Adabas D •dBase
•Empress •filePro (sólo lectura)
•IBM DB2 •dbm (ndbm, gdbm, Berkeley db)
•Informix
•Ingres
•Interbase
•Frontbase
•mSQL
•Direct MS-SQL
•MySQL
•ODBC
•Oracle (OCI7,OCI8)
•PostgreSQL
•Raima Velocis
•Solid
•Sybase
IT Colima Ene-Jun 2009 10
2. El lenguaje PHP

IT Colima Ene-Jun 2009 11


2.1. Extensión de los ficheros

 .php3 Indica código PHP 3.x.


 .php4 Indica código PHP 4.x.
 .php Indica código PHP. Preferiremos esta
extensión por ser más genérica.
 .phtml Actualmente en desuso.

IT Colima Ene-Jun 2009 12


2.2. Delimitadores

<? echo 'Primer método de delimitar código PHP'; ?>

<?php echo 'Segundo método, el más usado'; ?>

<script language="php">
echo 'Algunos editores (como el FrontPage) Sólo
entienden este método';
</script>

<% echo 'Método de compatibilidad con ASP'; %>

IT Colima Ene-Jun 2009 13


2.2. Delimitadores. Ejemplo.
<html>
<body>
<?php
$H=Date(H);
if ( $H>20 || $H<4)
{
echo “Buenas noches.”;
}
else
{
echo “Buenos días.”;
}
?>
</body>
</html>
IT Colima Ene-Jun 2009 14
2.2. Delimitadores. Ejemplo. ASP

<%@ Language=VBScript %>


<html>
<body>
<%IF Hour(time)>20 OR Hour(time)<4 THEN%>
Buenas noches.
<%ELSE%>
Buenos días.
<%END IF%>
</body>
</html>

IT Colima Ene-Jun 2009 15


2.2. Delimitadores. Ejemplo. PHP

<html>
<body>
<?php if ( Hour(time)>20 || Hour(time)<4) { ?>
Buenas noches.
<?php } else { ?>
Buenos días.
<?php }?>
</body>
</html>

IT Colima Ene-Jun 2009 16


2.3. Fin de línea

print( date("M d, Y H:i:s", time()) );

print (
date( "M d, Y H:i:s",
time()
)
)
;

IT Colima Ene-Jun 2009 17


2.4. Comentarios

/* Comentarios estilo C.
* Pueden extenderse durante varias líneas.
*/

// Comentarios estilo C++. Hasta fin de línea.

# Comentarios estilo Perl. Hasta fin de línea.

IT Colima Ene-Jun 2009 18


2.5.1. Variables. Declaración y Uso.

• NO hace falta declararlas


• Llevan delante el signo del dólar ‘$’.

$var_1 = 123;
$var_2 = ’hola’;
$var_3 = $var_1 * 2;

IT Colima Ene-Jun 2009 19


2.5.2. Variables. Tipado.

Variables débilmente tipadas (tipo mixed).

$mi_variable = ’Inicializamos como texto’;


$mi_variable = 3; // Entero.
$mi_variable = 3.14 * $mi_variable; // Float.
$mi_variable = new MiClase(); // Objeto.

IT Colima Ene-Jun 2009 20


2.5.2. Variables. Tipado.
Conversión automática.

PHP realiza conversiones automáticas de tipo:

$mivar = 123;
echo $mivar; // Se convierte a string

$mivar = ’3’; // Se convierte a entero


$mivar = 2 + $mivar; // para realizar la suma

IT Colima Ene-Jun 2009 21


2.5.2. Variables. Tipado.
Conversión explícita.

Operador cast:

$mivar = (string)123;

Cabiar el tipo de una variable:

$mivar = 12;
settype($mivar, "double");
IT Colima Ene-Jun 2009 22
2.5.3. Variables. Ámbito.
 En el cuerpo de un fichero, las variables
son GLOBALES al fichero y ficheros
incluidos.
 En una función, son LOCALES a esa
función.
 Dentro de una clase, sólo pueden ser
accedidas a través del operador “->”
sobre el nombre del objeto.

IT Colima Ene-Jun 2009 23


2.5.4. Referencias.

Se definen con el carácter ‘&’:

$alias = &$variable

Se puede eliminar una referencia con la función unset():

$a = 1;
$b = &$a;
unset ($a); // Pero $b sigue valiendo 1
IT Colima Ene-Jun 2009 24
2.6. Tipos de datos.

•Enteros, en decimal, octal o hexadecimal.


$MiVar = 123;

•Punto flotante.
$MiVar = 1.3e4;

•Arrays.
$MiVar[2] = 123;

•Strings.
$MiVar = “Cadena de texto\n”;

•Objetos:
$MiVar = newIT Colima
MiClase();
Ene-Jun 2009 25
2.6.3. Tipos de datos. Arrays.

$MiArray[0] = 1;

$MiArray[1] = “hola!!”;

$MiArray[] = 3;

echo $MiArray[2]; // 3

IT Colima Ene-Jun 2009 26


2.6.3. Tipos de datos. Arrays (2).

Funcionan como vectores o tablas hash al mismo tiempo:

$MiArray[“nombre”] = “Homer”;
echo $MiArray[0]; // 1
echo $MiArray[“nombre”]; // “Homer”
referencia

Y pueden tener más de una dimensión:

$MiOtroArray[1][“pepe”][4] = “3 dimensiones!”;

IT Colima Ene-Jun 2009 27


2.6.3. Tipos de datos. Arrays (3).

También se pueden definir con el constructor array() :

$OtroArrayMas = array( 1, “hola”, 5);

$YOtroArray = array(
0 => 1,
1 => “hola”,
2 => 5,
3 => 8,
“nombre” => “Homer”
);
IT Colima Ene-Jun 2009 28
2.6.4. Tipos de datos. Strings.
Comillas dobles.

• Si se delimitan entre comillas dobles (”), se expandirá


cualquier variable que haya dentro de la cadena. Además, se
pueden incluir ciertas secuencias de escape, al igual que en C:
Secuencia Significado
\n Nueva línea
\r Retorno de carro
\t Tabulación horizontal
\\ Barra invertida
\$ Símbolo del dólar
\" Dobles comillas
\[0-7]{1,3} Carácter en octal
\x[0-9A-Fa-f]{1,2} Carácter en hexadecimal
IT Colima Ene-Jun 2009 29
2.6.4. Tipos de datos. Strings (2).
Comillas simples.

 Si se delimitan entre comillas simples


(’), las variables no se expanden y
además las únicas secuencias de
escape que se reconocen son “\\” y
“\'” (barra invertida y comillas
simples.)

IT Colima Ene-Jun 2009 30


2.6.4. Tipos de datos. Strings (3).
“Here Doc”

 Utilizando la sintaxis “here doc” de Perl. Las


variables se expanden y no hace falta escapar
las comillas:

$cadena = <<<FINCAD
Esto es un ejemplo de cadena como “here doc”.
La variable \$a vale $a.
Ahora vamos a finalizar la cadena:
FINCAD

IT Colima Ene-Jun 2009 31


2.6.4. Tipos de datos. Strings (4).

Para concatenar cadenas se utiliza el operador ‘.’ :

$cad = ‘A esta cadena ‘;


$cad = $cad . ‘le vamos a añadir más texto.’;

Se puede acceder a cada carácter como si fuera un array:

$cad2 = “Tercer carácter de \$cad : ‘$cad[2]’”;

IT Colima Ene-Jun 2009 32


2.7. Constantes.

Las constantes se definen con la función define():


define(“SALUDO”, “Hola, mundo!”);
echo “La constante SALUDO vale ” . SALUDO;

Las constantes en PHP se diferencian de las variables en


que:
•no llevan el símbolo del dólar delante.
•puede accederse a ellas desde cualquier parte del
código donde han sido definidas, sin restricciones de
ámbito como en las variables.
•no pueden ser redefinidas o borradas una vez
definidas.
•sólo pueden contener valores
IT Colima Ene-Jun 2009 escalares, no vectores.33
2.8. Mayúsculas y minúsculas.

Comportamiento mixto en variables y funciones:

•En las variables, las mayúsculas y minúsculas


IMPORTAN.
•En los nombres de funciones y palabras reservadas,
las mayúsculas NO IMPORTAN.

IT Colima Ene-Jun 2009 34


2.9.1. Operadores aritméticos.

Operación Nombre Resultado


$a + $b Suma Suma de $a y $b.
$a - $b Resta Diferencia entre $a y $b.
$a * $b Multiplicación Producto de $a y $b.
$a / $b División Cociente de $a y $b.
$a % $b Módulo Resto de la operación $a/$b.

IT Colima Ene-Jun 2009 35


2.9.2. Auto-incremento y
auto-decremento.

OperaciónNombre Resultado
Incrementa $a en 1, y
++$a Pre-incremento
devuelve $a (incrementado).
Devuelve $a, y después lo
$a++ Post-incremento
incrementa en 1.
Decrementa $a en 1, y
--$a Pre-decremento
después lo devuelve.
Devuelve $a, y después lo
$a-- Post-decremento
incrementa en 1.

IT Colima Ene-Jun 2009 36


2.9.3. Operadores de bits.

Operación Nombre Resultado


Se ponen a 1 los bits que están a
$a & $b Y
1 en $a y $b.
Se ponen a 1 los bits que están a
$a | $b O
1 en $a o $b.
Se ponen a 1 los bits que están a
$a ^ $b O Exclusivo
1 en $a o $b, pero no en ambos.
Se invierten los bits (se cambian 1
~ $a No
por 0 y viceversa.)
Desplaza $b posiciones a la
$a << $b Desp. Izq.
izquierda todos los bits de $a.
Desplaza $b posiciones a la
$a >> $b Desp. Drch.
IT Colima Ene-Jun 2009 37
derecha todos los bits de $a.
2.9.4. Operadores lógicos.

Operación Nombre Resultado


$a and $b Y Cierto si $a y $b son ciertos.
$a or $b O Cierto si $a o $b es cierto.
Cierto si $a o $b es cierto, pero no
$a xor $b O Exclusivo.
ambos.
! $a No Cierto si $a es falso.
$a && $b Y Cierto si $a y $b son ciertos.
$a || $b O Cierto si $a o $b es cierto.

IT Colima Ene-Jun 2009 38


2.9.5. Operadores. Asignación,
igualdad e identidad.

OperaciónNombre Resultado
Asigna el valor de una variable o
$a = $b Asignación expresión del segundo término a la
variable del primer término.
Compara si el valor de los dos
$a == $b Igualdad
operandos es el mismo.
Compara si el valor es el mismo y,
$a === $b Identidad
además, el tipo coincide.

IT Colima Ene-Jun 2009 39


2.9.5. Operadores. Asignación,
igualdad e identidad.Ejemplo.

$var1 = 1; // Asignación
$var2 = 1;
$var3 = “1”;
($var1 == $var2) // Cierto, son iguales
($var1 == $var3) // Son iguales (tras conversión)
($var1 === $var2) // Cierto, son idénticas
($var1 === $var3) // FALSO, el tipo no coincide

IT Colima Ene-Jun 2009 40


2.9.5. Operadores. Asignación,
igualdad e identidad. Error.

$var1 = 1;
$var2 = 2;
if( $var1 = $var2 )
{
echo ‘iguales’;
}
else
{
echo ‘distintas’;
}

IT Colima Ene-Jun 2009 41


2.9.6. Comparaciones.

Operación Nombre Resultado


Cierto si el valor de $a no es
$a != $b No igual
igual al de $b.
Cierto si $a no es igual a $b, o
$a !== $b No idéntico
si no tienen el mismo tipo.
Cierto si $a es estrictamente
$a < $b Menor que
menor que $b.
Cierto si $a es estrictamente
$a > $b Mayor que
mayor que $b.
Cierto si $a es menor o igual
$a <= $b Menor o igual que
que $b.
Cierto si $a es mayor o igual
$a >= $b Mayor o igual que
que $b.
IT Colima Ene-Jun 2009 42
2.9.7. Operadores de cadenas.

$a = 1;
$b = 2;

Echo ‘El resultado de ‘ . $a . ‘ + ‘ . $b . ‘ es ‘ , $a + $b;

Echo “El resultado de $a + $b es “ , $a + $b;

IT Colima Ene-Jun 2009 43


2.9.8. Atajos en la asignación.

+= -= *= /= %= &= ^= .= >>= y <<=

$var1 += 3; // $var1 = $var1 + 3;


$var2 /= 2; // $var2 = $var2 / 2;
$var3 >>= 1; // $var3 = $var3 >> 1;

IT Colima Ene-Jun 2009 44


2.9.9. Precedencia.

, ^
or &
xor == != === !==
and < <= > >=
print << >>
= += -= *= /= .= %= &= +-.
|= ^= ~= <<= >>= */%
?: ! ~ ++ -- (int) (double)
|| (string) (array) (object) @
&& [
| new
IT Colima Ene-Jun 2009 45
2.10.1. Estructuras de control.
if … elseif … else

if (expresión)
{
comandos
}

if (expresión)
{
comandos_cierto
}
else
{
comandos_falso
IT Colima Ene-Jun 2009 46
}
2.10.1. Estructuras de control.
if … elseif … else (2)

if (expresion1)
{
comandos1
}
elseif (expresion2)
{
comandos2
}
elseif (expresion3)
{
comandos3
}
...
else
{
comandosElse
IT Colima Ene-Jun 2009 47
}
2.10.2. while y do … while

while (expresión)
{
comandos
}

do
{
comandos
}
while (expresión);
IT Colima Ene-Jun 2009 48
2.10.4. for

for (expresión1; expresión2; expresión3)


{
comandos
}

$factorial5 = 1;
for ($i = 2; $i <= 5; $i++ )
{
$factorial5 *= $i;
}

IT Colima Ene-Jun 2009 49


2.10.4. for (2)

for ($factorial5 = 1, $i = 2; $i <= 5; $i++ )


{
$factorial5 = $factorial5 * $i;
}

for ($factorial5=1, $i=2;


$i<=5;
$factorial5*=$i, $i++);

IT Colima Ene-Jun 2009 50


2.10.4. for (3). ASP.

’ ASP
<%FOR i=1 TO 100%>
<%=MiVar%>
<%NEXT%>

// PHP
<?php
for ($i = 1; $i <= 100; $i++)
{
echo $MiVar;
}
?> IT Colima Ene-Jun 2009 51
2.10.5. foreach

foreach (array as variable)


{
comandos
}

$a = array (1, 2, 3, 17);


foreach ($a as $v)
{
print "Valor actual de \$a: $v.\n";
}

// Valor actual de $a: 1


// Valor actual de $a: 2
// Valor actual de $a: 3
// Valor actual de
IT $a:
Colima 172009
Ene-Jun 52
2.10.5. foreach (2)

foreach (array as indice => variable)


{
comandos
}

IT Colima Ene-Jun 2009 53


2.10.6. switch

switch (variable)
{
case valor1:
comandos1
case valor2:
comandos2
...
case valorN:
comandosN
default:
comandosDefault
}
IT Colima Ene-Jun 2009 54
2.10.6. switch (2)

switch ($i)
{
case 1:
echo “Código del 1”;

case 2:
echo “Código del 2”;

case 3:
echo “Código del 3”;
break;

case 4:
echo “Código del 4”;
} IT Colima Ene-Jun 2009 55
2.11. Cierto o falso.
Valores numéricos.

$x = 1; // $x
if( $x ) // se evalúa a cierto

$x = 0; // $x definida como el entero 0


if( $x ) // se evalúa a falso

IT Colima Ene-Jun 2009 56


2.11. Cierto o falso.
Strings.

$x = "hello"; // asignamos una cadena a $x


if( $x ) // se evalúa a cierto

$x = ""; // cadena vacía


if( $x ) // evalúa a falso

// Excepción:
$x = "0"; // cero en una cadena
if( $x ) // evalúa a falso
// (se convierte a entero)
IT Colima Ene-Jun 2009 57
2.11. Cierto o falso.
Arrays.

$x = array(); // $x es un array vacío


if( $x ) // se evalúa como falso

$x = array( "a", "b", "c" );


if( $x ) // se evalúa a cierto

IT Colima Ene-Jun 2009 58


2.11. Cierto o falso.
Objetos.

Class Yod {} // clase vacía


$x = new Yod();
if( $x ) // se evalúa a falso

Class Yod { // clase no vacía


var $x = 1;
}
$x = new Yod();
if( $x ) // se evalúa a cierto

IT Colima Ene-Jun 2009 59


2.11. Cierto o falso.
Constantes.

•TRUE es el valor entero decimal 1.

•FALSE es la cadena vacía.

IT Colima Ene-Jun 2009 60


2.12. Funciones.

function nombre ($arg_1, $arg_2, ..., $arg_n)


{
comandos
return $salida;
}

IT Colima Ene-Jun 2009 61


2.12. Funciones. (2)
Ejemplo.
function factorial ($valor) {
if ($valor < 0) {
return –1; // Error
}

if ($valor == 0 ) {
return 1;
}

if ($valor == 1 || $valor == 2) {
return $valor;
}

$ret = 1;
for ($i = 2; $i <= $valor; $i++) {
$ret = $ret * $i;
}
return $ret;
} IT Colima Ene-Jun 2009 62
$factorial5 = factorial(5);
Echo $factorial5;
2.12. Funciones. (3)
Valores por defecto.

function enlace($url)
{
echo “<a href= $url>Pulsa aquí</a>”;
}

Echo enlace(“http://www.itcolima.mx”);
Echo “<br>”;
Echo enlace(“http://localhost”);

IT Colima Ene-Jun 2009 63


2.12.1. Funciones.
Argumentos por referencia.

function MiFuncion(&$var)
{
$var++;
}

$a = 5;
MiFuncion($a);
// Aquí $a == 6

IT Colima Ene-Jun 2009 64


2.12.2. Funciones.
Devolución por referencia.

function &buscar_cliente($nombre)
{
// ... buscamos ...
return $registro;
}

$cliente = &buscar_cliente(“Juan”);
echo $cliente->dni;

IT Colima Ene-Jun 2009 65


2.13. include y require

require(“cabecera.inc”);

If ($incluir == TRUE)
{
$ficheros = array(“uno”, ”dos”, ”tres”);
foreach ($ficheros as $fichero)
{
include($fichero);
}
}
IT Colima Ene-Jun 2009 66
3. Programando en PHP

IT Colima Ene-Jun 2009 67


3.1.1. Forms.
formulario.html
<form action=“datos.php" method="POST">
Su nombre: <input type=text name=nombre><br>
Su edad: <input type=text name=edad><br>
<input type=submit>
</form>

datos.php
<?php
echo “Tu nombre es:”.$_POST[‘nombre’].”<br>”;
echo “Tu edad es:”.$_POST[‘ edad’].”<br>”;
echo “Tu edad es:”.$edad.”<br>”; // con register_globals=on
?>

IT Colima Ene-Jun 2009 68


3.1.2. Forms. (todo en la misma pagina)
<?php
if ( isset($_POST["Enviar"]) ) { // validando si existe el boton Enviar
echo "el nombre es".$_POST["nombre"]."<br>";
echo "la edad es".$_POST["edad"]."<br>";
}
else { ?>
<p>Captura de datos personales:</p>
<form id="form1" name="form1" method="post" action="" >
<p>Nombre: <input type="text" name="nombre" id="nombre" /> <br />
Edad: <input type="text" name="edad" id="edad" /> </p>
<p> <input type="submit" name="Enviar" id="Enviar" value="Enviar" />
<input type="reset" name="Limpiar" id="Limpiar" value="Limpiar" /> </p>
</form>
<? } ?>
</body>
</html>

IT Colima Ene-Jun 2009 69


3.1.2. Forms. (todo en la misma pagina)
Ejercicios con formularios

IT Colima Ene-Jun 2009 70


3.2. Cookies.

int setcookie (string nombre [, string valor


[, int fin [, string camino
[, string dominio
[, int seguro]]]]])

setcookie(“PruebaCookie”,
“expiraré dentro de una hora”,
time() + 3600);

setcookie(“PruebaCookie”, “”, time());


IT Colima Ene-Jun 2009 71
3.3. Sesiones.

bool session_start(void);
bool session_register (mixed name [, mixed ...])
bool session_destroy(void);

// Ejemplo, un contador
session_start();
print($contador);
$contador++;
session_register("contador");

<A HREF="siguiente.php?<?=SID?>">Continuar</A>
IT Colima Ene-Jun 2009 72
3.4. Tratamiento de errores.

$nombre = '/etc/shadow';

$fichero = @fopen ($nombre, 'r');

if( !$fichero )
{
die("No se pudo abrir el fichero ($nombre)");
}

IT Colima Ene-Jun 2009 73


3.5.1. Cadenas. Comparación.
El operador (==) nos puede servir para evaluar si dos cadenas
de caracteres son iguales dentro de una estructura de control.
Además, tenemos la función strcmp( ) , que compara bit a bit
dos cadenas de caracteres. Atendiendo al valor de salida de la
función, podemos obtener los siguientes resultados:

• Si el valor que se obtiene es 0, las dos cadenas son


exactamente igual.
• Si obtenemos un valor negativo, el primer string es más
pequeño que el segundo.
• Si obtenemos un valor positivo, el primer string es más
grande que el segundo.

IT Colima Ene-Jun 2009 74


3.5.1. Cadenas. Comparación.

int strcmp (string str1, string str2)


int strcasecmp (string str1, string str2)
(esta no es sensible a mayúsculas)

// Ejemplo:
if (strcmp($a, $b) == 0)
{
echo ‘iguales’;
}

IT Colima Ene-Jun 2009 75


3.5.2. Cadenas. Subcadenas.
La función substr() permite seleccionar un conjunto de caracteres de una cadena,
quedando intacto el string original.

string substr (string cadena, int inicio


[, int tamaño])

$str = substr('abcdef', 2, 3); // cde


$str = substr('abcdef', -2); // ef
$str = substr('abcdef', -2, 1); // e
$str = substr('abcdef', 1, -2); // bcd

IT Colima Ene-Jun 2009 76


3.5.2. Cadenas. Subcadenas. (2)
La función strpos() encuentra en un string la posición de un carácter determinado.
int strpos (string cadena, string referencia
[, int inicio])
int strrpos (string cadena, char referencia)

$i = strpos('cadena de prueba', 'de');


// $i = 2
$i = strpos('cadena de prueba', 'de', 5);
// $i = 7
$s = strrpos('cadena de prueba', 'de');
// $s = 7
$s = strstr('cadena de prueba', 'de');
// $s = dena de prueba

IT Colima Ene-Jun 2009 77


3.5.2. Cadenas. Subcadenas. (2)
<?php
$cadena = "Esta cadena tiene muchas letras";
echo "La primera ocurrencia de 'tiene' es " .
strpos($cadena,"tiene") . "<br>";
?>

<?php
$cadena = "Esta cadena tiene muchas letras";
echo "La primera ocurrencia de 'a' es " . strpos($cadena, "a" ) ."<br>";
echo "La primera ocurrencia desde atrás de 'a' es " .
strrpos($cadena, "a") . "<br>";
?>

IT Colima Ene-Jun 2009 78


3.5.2. Cadenas. Subcadenas. (2)
string strstr (string cadena, string referencia)

•La función strstr() recibe como parámetros una cadena de caracteres


donde buscar y otra con un conjunto de caracteres que queremos encontrar.
•Si se encuentra el patrón de búsqueda, el resultado será una cadena de
caracteres que comenzará justo en el patrón, hasta el final del string
primero.
•Si no se encuentra el patrón el resultado será false.
< ?php
$cadena = "Esta cadena tiene muchas letras";
echo "La primera ocurrencia de 'cadena' es: " .
strstr ($cadena,"cadena") . "<br>";
?>

IT Colima Ene-Jun 2009 79


3.5.2. Cadenas. Limpieza de cadenas
Sirven para limpiar espacios en blanco al principio de la cadena, al final o en
cualquier parte desde el principio al final y son respectivamente ltrim( ) , chop() y
trim()
subcads4.php
<?php
$salto_linea = "\n";
$cadena = " cadena con varios espacios en blanco " ;
echo $salto_linea . $cadena . " tamaño: " . strlen($cadena);
echo "<br>";
echo $salto_linea . ltrim($cadena) . " tamaño: ".strlen(ltrim($cadena));
echo "<br>";
echo $salto_linea . chop($cadena) . " tamaño: ".strlen(chop($cadena));
echo "<br>";
echo $salto_linea . trim($cadena) . " tamaño: ".strlen(trim($cadena));
?>

IT Colima Ene-Jun 2009 80


3.5.2. Cadenas. Sustitucion de cadenas
La función str_replace() toma como parámetros un conjunto de caracteres a buscar, un
grupo que debe sustituirse por el anterior y una cadena de caracteres sobre la que actuar.
<?php //subcads5.php
$cadena = "Esta cadena tiene muchas letras";
$cadena = str_replace("Esta","Este",$cadena);
echo str_replace("cadena","conjunto",$cadena);
?>
Si en la cadena existiera más de una instancia del conjunto buscado, todas las ocurrencias
quedarían cambiadas.
<?php //subcads6.php
$cadena = "Esta cadena tiene muchas letras y cadenas";
$cadena = str_replace("Esta","Este",$cadena);
echo str_replace("cadena","conjunto",$cadena);
?>
IT Colima Ene-Jun 2009 81
3.5.2. Cadenas. Funciones de mayúscula
y minúscula
Las funciones strtolower() y strtoupper() devuelven la cadena que
se pasa como argumento, completamente en minúscula o mayúscula
respectivamente.

<?php//subcads8.php
$cadena = "Hay palabras en MAYÚSCULAS y en minúsculas<br>" ;
echo strtolower($cadena) ;
echo strtoupper($cadena);
?>

IT Colima Ene-Jun 2009 82


3.5.2. Cadenas. Funciones de mayúscula
y minúscula
Si lo que realmente nos interesa es que la primera letra de un texto
aparezca como letra Capital o, que letras iniciales de cada palabra en
una frase aparezcan en mayúscula, tenemos las funciones ucfirst( ) y
ucwords( ) .

<?php
$cadena = "había una vez...<br>";
echo ucfirst($cadena);
$cadena2 = "linux user group";
echo "LUG significa ".ucwords($cadena2) ;
?>

IT Colima Ene-Jun 2009 83


3.5.2. Cadenas. Expresiones regulares
 Las funciones vistas anteriormente basan su potencia en la
búsqueda o sustitución de los caracteres de una cadena, pero
son poco útiles cuando tratamos de comprobar si un conjunto
de caracteres cumple un formato determinado.
 Si solicitamos mediante un formulario un correo electrónico,
necesitamos saber, a priori, si ese correo por lo menos está bien
construido
alumno@hotmail.org
alumno@gmail.com

IT Colima Ene-Jun 2009 84


3.5.2. Cadenas. Expresiones regulares
 Laidea es poder descartar de alguna forma los
correos escritos:
alumno @hotmail.org
ALUMNO@gmail.com
alumno@@hotmail.org

IT Colima Ene-Jun 2009 85


3.5.2. Cadenas. Comprobar expresiones regulares
La función ereg() es capaz de comprobar si una cadena se corresponde
con el patrón que se pasa como parámetro. Toma dos argumentos
obligatorios, una expresión regular y una cadena de caracteres donde
buscar el patrón. Seguidamente puede ver un ejemplo completo de
utilización de expresiones regulares y la función:

IT Colima Ene-Jun 2009 86


3.5.2. Cadenas. Expresiones regulares
 Las expresiones
regulares son
patrones de
búsqueda dentro de
cadenas.
 Estos patrones se
construyen
mediante caracteres
especiales que
cumplen unas
reglas
determinadas

IT Colima Ene-Jun 2009 87


Ejemplo Descripción
Tipo de Operador

aAy6%
Letras, digitos y cualquier carácter especial
@

\$ \^ \+ \\ \? Precede un caracter especial con el signo \ para cancelar su significado


Caracteres literales
Localización de un carácter concreto \n \t \r Nueva linea, tabulación y retorno de carro

\cJ \cG Códigos de control

\xa3 Códigos hexadecimales


^ Empieza con
Delimitadores
$ Termina con

[aAeEiou] cualquier carácter incluído en [ ]

[^aAeEiou] cualquier carácter excepto aAeEiou


[a-fA-F0-9] cualquier carácter hexadecimal (’0′ a ‘9′ o ‘a’ a ‘f’)

. cualquier carácter
Grupo de carácteres
[[:space:]] cualquier espacio (espacio \n \r o \t)

[[:alpha:]] cualquier letra

[[:digit:]] cualquier digito

[^[:space:]] cualquier carácter que no sea un espacio

+ 1 o mas (”algunos”)
* 0 o mas (”quizas algunos”)
? 0 0 1 (”quizas a”)

Agrupaciones aplicadas a elementos {4} 4 exactos


{4,} 4 o más

{4,8} entre 4 y 8

Alternar | una u otra

() agrupación almacenandola a una variable


Agrupando IT Colima Ene-Jun 2009 88
(?: ) agrupacion sin almacenar en variable
3.5.2. Cadenas. Expresiones regulares
[ a - z ] + @ [ a - z ] + \ . o rg

 La primera parte, [a-z] +, nos dice que aceptará una letra, o conjunto de
letras, sin espacios y en minúsculas, que pueden corresponderse con el
nombre de usuario de la cuenta de correo.
 Después aceptará un símbolo @, seguido de otro conjunto de
caracteres, correspondientes al servidor de correo.
 La última parte de la expresión la componen los símbolos \ ., que
indican que tiene que aparecer un punto que separe la descripción del
servidor del dominio y la cadena org , que obliga a que todos los correos
sean de dominio no gubernamental.

IT Colima Ene-Jun 2009 89


3.5.2. Cadenas. Expresiones regulares

^[ a - z ]+@[ a - 2 ] + \ . o r g$

Obliga a que el comienzo de la cadena y el final sean parte


de la expresión.

IT Colima Ene-Jun 2009 90


3.5.2. Cadenas. Expresiones regulares
También podemos encontrarnos con que existen correos
introducidos correctamente, pero el dominio es otro
distinto a org. Esta vez la solución es introducir el
operador O lógico |, que permite elegir entre varias
opciones:

^ [ a - z ] +@ [ a - z ] + \ . ( o r g | c o m | n e t )$

IT Colima Ene-Jun 2009 91


3.5.2. Cadenas. Expresiones regulares
Un problema menor, aunque habitual en el ámbito de los
correos electrónicos, es la utilización de signos de
puntuación para separar nombres y apellidos y servidores
de servidores virtuales.
 Por ejemplo, el correo siguiente es correcto, pero no sería
evaluado por la expresión anterior:
alumno.sistemas@labredes.itcolima.edu.mx

IT Colima Ene-Jun 2009 92


3.5.2. Cadenas. Expresiones regulares
alumno.sistemas@labredes.itcolima.edu.mx
Solución

^[a-z\.]+@[a-z\.]+\.(org|com|net|edu)$

IT Colima Ene-Jun 2009 93


3.5.2. Cadenas. Comprobar expresiones regulares
<?php
$correo = "alumno.sistemas@labredes.itcolima.org";
$correol = "ALUMNO@labredes@itcolima.edu";
$correo2 = "@lumno.sistemas@labrede.itcolima.edu";
if ( ereg("^[a-z\.]+@[a-z\.]+\.(org|com|net|edu)$",$correo) ){
echo "El correo $correo se acepta.<br>";
} else {
echo "El correo $correo no cumple el patrón.<br>";
}
if (ereg("^[a-z\.]+@[a-z\.]+\.(org|com|net|edu)$",$correol) ) {
echo "El correo $correol se acepta.<br>";
}else {
echo "El correo $correol no cumple el patrón.<br>";
}
if (ereg("^[a-z\.]+@[a-z\.]+\.(org|com|net|edu)$",$correo2)) {
echo "El correo $correo2 se acepta.<br>";
}else {
echo "El correo $correo2 no cumple el patrón.<br>";
}
?>

IT Colima Ene-Jun 2009 94


3.5.3. Cadenas.
Imprimir y formatear.

int printf (string formato [, mixed args...])


string sprintf (string formato [, mixed args...])

1. Relleno
2. Alineación Secuencias de formato
3. Número de caracteres
4. Precisión
5. Tipo
% El carácter de tanto por ciento.
b Entero en binario.
c Entero como carácter ASCII.
d Entero en decimal.
f Double en punto flotante.
o Entero en octal.
s Cadena.
x Entero en hexadecimal (minúsculas).
IT Colima Ene-Jun 2009 95
X Entero en hexadecimal (mayúsculas).
3.5.3. Cadenas.
Imprimir y formatear. (2)
<?php
$dia=17;
$mes=3;
$anio=2009;
printf("%02d/%02d/%04d", $dia, $mes, $anio);
echo "<br>";
$pago1 = 68.75;
$pago2 = 52.35;
$pago = $pago1 + $pago2;

// echo $pago mostraría "123.1"


// Mostrar al menos un dígito entero y exactamente
// dos decimales, rellenando con ceros

printf ("%01.2f", $pago);


?> IT Colima Ene-Jun 2009 96
3.5.4. Escapar caracteres.
SQL.

$busca = “D’Alton”;
// Habrá que escapar el apóstrofe

$sql = ‘SELECT *
FROM usuarios
WHERE apellido = \’’ .
addslashes($busca) . ‘\’’;

IT Colima Ene-Jun 2009 97


3.5.4. Escapar caracteres.
Shell.

string system (string comando [, int valor_salida])

echo system(“finger $usuario”);

¿Qué pasa si $usuario=“pepe ; apachectl stop” ?

string escapeshellcmd (string comando)

IT Colima Ene-Jun 2009 98


3.5.4. Escapar caracteres.
HTML.

$valor = “a>b”;
echo ‘<input type=hidden name=var value=”’ .
htmlspecialchars($valor) . ‘”>’;

// <input type=hidden name=var value=”a&gt;b”>

string nl2br (string cadena)

IT Colima Ene-Jun 2009 99


3.5.5. Extraer campos.

array explode (string delimitador, string cadena


[, int límite])

$cadena = “campo1:campo2:campo3”;
$campos = explode(“:”, $cadena);

string implode (string delimitador, array campos)

$cadena = implode(“:”, $campos);

IT Colima Ene-Jun 2009 100


3.5.5. Extraer campos.
Expresiones regulares.

array split (string delimitador, string cadena


[, int límite])

$fecha = "12/4 2000";


$campos = split ('[ /.-]', $fecha);

IT Colima Ene-Jun 2009 101


3.5.6. Recorrer un array.

reset(), end(), next(), each(), current(), key()

$arr = array(1,'cosa',1.57,'gato'=>'raton','perro'=>'gato');

current($arr); // 1
next($arr); // cosa
current($arr); // cosa
prev($arr); // 1
end($arr); // gato
current($arr); // gato
key($arr); // perro
reset($arr); // 1
each($arr); // array(0,1)
each($arr); // array(1,'foo')
each($arr); // array(2,1.57)
IT Colima Ene-Jun 2009 102
3.5.7. Ordenar un array.

• sort(): Ordena el array por contenido en orden ascendente.

• rsort(): Ordena por contenido en orden descendente.

• ksort(): Ordena por el índice en orden ascendente.

• rksort(): Ordena por el índice en orden descendente.

IT Colima Ene-Jun 2009 103


3.5.8. Otras funciones.

Eliminar espacios en blanco:

string trim (string cadena)


string ltrim (string cadena)
string rtrim (string cadena)

Mayúsculas y minúsculas:
string strtoupper (string cadena)
string strtolower (string cadena)
string ucfirst (string cadena)
IT Colima Ene-Jun 2009 104
3.6.1. Ficheros.
Abrir y cerrar.

int fopen (string nombre, string modo


[, int include_path])

Modos:
•‘r’ Sólo lectura. Puntero al inicio.
•‘r+’ Lectura/escritura. Puntero al inicio.
•‘w’ Sólo escritura. Se trunca el fichero.
•‘w+’ Lectura/escritura. Se trunca el fichero.
•‘a’ Sólo escritura. Puntero al final.
•‘a+’ Lectura/escritura. Puntero al final.

int fclose (int identificador)


IT Colima Ene-Jun 2009 105
3.6.2. Ficheros.
Leer y escribir.

string fgets (int identificador, int tamaño)

mixed fscanf (int identificador, string formato


[, string var1...])

int feof (int identificador)

array file (string fichero


[, int include_path])

int fwrite (int identificador, string cadena


[, int tamaño])
IT Colima Ene-Jun 2009 106
3.6.3. Ficheros.
Copiar / renombrar / borrar.

int copy (string origen, string destino)

int rename (string origen, string destino)

int unlink (string fichero)

IT Colima Ene-Jun 2009 107


3.6.4. Directorios.

int chdir (string directorio)


int mkdir (string nombre, int modo)
int rmdir (string nombre)

int opendir (string nombre)


string readdir (int identificador)
void closedir (int identificador)

IT Colima Ene-Jun 2009 108


3.6.4. Directorio. Listado de
contenidos.

$direcotrio = opendir('.');

while (($fichero = readdir($directorio)) !== FALSE)


{
echo "$fichero\n";
}

closedir($directorio);

IT Colima Ene-Jun 2009 109


3.6.5. Ficheros. Envío.

<FORM ENCTYPE="multipart/form-data"
ACTION="recibir.php" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
Fichero: <INPUT NAME="fichero" TYPE="file">
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>

// Contenido de “recibir.php”
echo ’Recibido el fichero: "’.$fichero_name.’"<br>’;
echo ’Tamaño del fichero: ’ . $fichero_size . ’<br>’;
echo ’Tipo mime: ’ . $fichero_type . ’<br>’;
rename($fichero, $fichero_name);
IT Colima Ene-Jun 2009 110
3.7.1. POO. Definición de una clase.

class NombreClase
{
var $variables;

function metodos ($parametros)


{
codigo
}
}

IT Colima Ene-Jun 2009 111


2.7.1. POO. Definición de una clase.
Ejemplo.

class Coche {
var $velocidad; // Velocidad actual

// Constructor por defecto. El coche está parado.


function coche() {
$this->velocidad = 0;
}
// Constructor que indica la velocidad inicial.
function coche($vel) {
$this->velocidad = $vel;
}
// Método acelerar. El coche va más rápido.
function acelerar() {
$this->velocidad++;
}
// Método frenar. El coche va más lento hasta frenar.
function frenar() {
if ($this->velocidad > 0) {
$this->velocidad--;
}
} IT Colima Ene-Jun 2009 112
}
2.7.1. POO. Modificadores de acceso
Restringiendo el acceso a las propiedades (encapsulacion)
• Modificadores de acceso:
•Publico (public) //por defecto
•Privado (private)
•Protegido (protected)
• Cuando se declara una propiedad como “privada” solo la
misma clase puede acceder a la propiedad
• Cuando se declara como “protected” solo la misma clase
y las clases derivadas puede acceder a la propiedad
(herencia).

IT Colima Ene-Jun 2009 113


2.7.1. POO. Modificadores de acceso
<?php
class persona{
var $nombre;
public $departemento, $edad;
private $RFC;
protected $clave;
function __construct(){
$this->nombre="xxxx";
$this->edad=0;
}
function set_nombre($nuevo_nombre){
$this->nombre = $nuevo_nombre;
}
function set_edad($nueva_edad){
$this->edad = $nueva_edad;
}
function get_nombre(){
return $this->nombre;
}
function get_edad(){
return $this->edad;
}
} IT Colima Ene-Jun 2009 114
2.7.2. POO. Herencia.

class ClaseDerivada extends ClaseBase


{

// definición de métodos y variables


// exclusivos de ClaseDerivada,
// y redefinición (especialización)
// de métodos de ClaseBase

IT Colima Ene-Jun 2009 115


2.7.2. POO. Herencia.
Ejemplo.
class persona{ class admvo extends persona{
var $nombre;
public $departemento, $edad;
}
private $RFC;
protected $clave;

function __construct(){
$this->nombre="xxxx";
$this->edad=0;
}
function set_nombre($nuevo_nombre){
$this->nombre = $nuevo_nombre;
}
function set_edad($nueva_edad){
$this->edad = $nueva_edad;
}
function get_nombre(){
return $this->nombre;
}
function get_edad(){
return $this->edad;
}
}

IT Colima Ene-Jun 2009 116


2.7.2. POO. Herencia.
Ejemplo.

class CocheFantastico extends coche() {


// Frenado instantáneo
function frena() {
$this->velocidad = 0;
}
// ¡El coche habla!
function habla() {
echo “Hola, Michael.”;
}
// ¡Salta!
function salta() {
echo “Boing!!”;
}
// Turbo propulsión
function turbo() {
$this->velocidad = 200;
IT Colima Ene-Jun 2009 117
}
}
2.7.3. POO. Creación y uso
de objetos.

// Creación (instanciación)
$MiCoche = new Coche;
$MiCocheSeMueve = new Coche(10);

// Uso
$MiCoche->acelerar();
$MiCoche->acelerar();
$MiCoche->acelerar();
echo $MiCoche->velocidad;
$MiCoche->frenar();
IT Colima Ene-Jun 2009 118
2.7.3. POO. Creación y uso
de objetos.

// Creación (instanciación)
$MiCoche = new Coche;
$MiCocheSeMueve = new Coche(10);

// Uso
$MiCoche->acelerar();
$MiCoche->acelerar();
$MiCoche->acelerar();
echo $MiCoche->velocidad;
$MiCoche->frenar();
IT Colima Ene-Jun 2009 119
2.7.3. POO. Interfaces
• Uso: cuando se hace imprescindible definir unas pautas generales
de trabajo para que el resultado final sea el esperado.
• Si el desarrollo consiste en programar varios objetos, el analista de
la aplicación puede definir la estructura básica en papel o crear una
pequeña plantilla con métodos que el objeto final debería tener
obligatoriamente.
• Esta plantilla es un interface y permite definir una clase con
funciones definidas, pero sin desarrollar, que obliga a todas las clases
que lo implementen a declarar estos métodos como mínimo.

IT Colima Ene-Jun 2009 120


2.7.3. POO. Interfaces
interface persona{
function set_nombre(){
}
function get_nombre(){
}
}

La interface anterior define la estructura básica que queremos para el


objeto, declarando las funciones set_nombre y get_nombre. Para que una
clase haga uso de la interface se declara de la siguiente forma:

class trabajador implements persona


IT Colima Ene-Jun 2009 121
2.7.3. POO. Clases abstractas
•Un interface no permite crear el cuerpo de ninguna función, dejando esta
tarea a las clases que la implementen.
•Las clases abstractas permiten definir funciones que deben implementarse
obligatoriamente en los objetos que hereden y, además, permiten definir
funciones completas que pueden heredarse.
• Las clases abstractas deben llevar la palabra reservada abstract en la
declaración de la clase y en todos los métodos que sólo definan su nombre.

abstract class persona{


protected $nombre;
function set_nombre($nombre){
$this->nombre=$nombre;
}
abstract function get_nombre(){
}
} IT Colima Ene-Jun 2009 122
2.7.3. POO. Clases abstractas
abstract class persona{
protected $nombre;
function set_nombre($nombre){
$this->nombre=$nombre;
}
abstract function get_nombre(){
}
}

• En lugar de un interface , se ha optado por utilizar una clase abstracta,


porque se tiene claro que el método set_nombre() tiene que funcionar
así.
• También se define el método abstracto get_nombre() , que
obligatoriamente debe ser declarado en la clase que herede de ésta.
• En realidad, un interface es una clase que tiene todos sus métodos
abstractos
IT Colima Ene-Jun 2009 123
POO. Clases con metodos estaticos
 En PHP 5 puede declarar funciones dentro de una
clase que no utilicen propiedades o métodos de la
misma.
 Estos métodos pueden calcular valores numéricos,
hacer una conexión a una base de datos o comprobar
que un correo electrónico esté bien definido.
 Aunque no existe ninguna palabra reservada para
definirlo, son conocidos como métodos estáticos y
pueden ser utilizados sin necesidad de instanciar un
objeto.
IT Colima Ene-Jun 2009 124
POO. Clases con metodos estaticos
<?php
class Nombre{
protected $nombre;
public function getNombre(){
return $this->nombre;
}
public function setNombre($nombre){
$this->nombre = $nombre;
}
public function NombreDefecto(){
return “Juan Perez<br>";
}

$juan = new Nombre;


echo $juan->NombreDefecto();
//También se puede acceder al nombre por defecto
echo Nombre::NombreDefecto();
?>

IT Colima Ene-Jun 2009 125


POO. Llamada a funciones de la clase
padre
 El operador ( :: ) se puede utilizar también dentro de
una clase para hacer llamadas a funciones de la clase
padre que estén sobrecargadas.
 Si define un constructor para la clase padre y otro
para la clase hijo, cuando cree el objeto, el
constructor que se ejecuta es el de nivel inferior, el
constructor hijo.
 Para llamar al constructor padre debe utilizarse la
nomenclatura Nombre_clase_padre : : construct() .
IT Colima Ene-Jun 2009 126
POO. Llamada a funciones de la clase
padre
<?php class Apellido extends Nombre{
class Nombre{ protected $apellidos;
protected $nombre; function __construct($nombre,$apellidos)
function __construct ( $nombre){ {
$this->nombre = $nombre; $this->apellidos = $apellidos;
} Nombre::construct(Snombre) ;
public function getNombre() }
{ public function getApellidos ()
return $this->nombre; {
} return $this->apellidos;
public function setNombre($nombre) }
{ }
$this->nombre = $nombre; $juan = new Apellido(“Juan",“Perez");
} echo $juan->getNombre() . "<br>";
public function NombreDefecto() echo $juan->getApellidos();
{ ?>
return “Juan Perez<br>";
}
}

IT Colima Ene-Jun 2009 127


3.8.1. BD. Conexión y
desconexión.

int mysql_connect ([string servidor [:puerto]


[:/camino/al/socket]
[, string usuario
[, string contraseña]]])

int mysql_close ([int identificador])

int mysql_pconnect ([string servidor [:puerto]


[:/camino/al/socket]
[, string usuario
[, string contraseña]]])

int mysql_pcloseIT Colima


([int Ene-Junidentificador])
2009 128
3.8.1. BD. Conexión y desconexión.
Ejemplo.

$link = mysql_connect ("www.mmlabx.ua.es",


"nobody", "");
if (!$link)
{
die ("No se pudo conectar");
}

print ("Conexión realizada");

mysql_close ($link);
IT Colima Ene-Jun 2009 129
3.8.2. BD. Elegir una BD.

int mysql_select_db (string nombre_bd


[, int identificador])

if (!mysql_select_db("prueba", $link))
{
die (“No existe la BD”);
}

IT Colima Ene-Jun 2009 130


3.8.3. BD. Querys.

int mysql_query (string query [, int identificador])


int mysql_db_query (string nombre_bd, string query
[, int identificador])
int mysql_free_result (int result)

$query = "SELECT codigo, nombre, descripcion,


creditos, tipo
FROM asignatura";

$asignaturas = mysql_query($query, $link);


if (!$asignaturas)
{
die (“Error en el query”);
IT Colima Ene-Jun 2009 131
}
3.8.4. BD. Extraer información.

int mysql_affected_rows ([int identificador])

int mysql_num_rows (int resultado)

array mysql_fetch_row (int resultado)

array mysql_fetch_array(int resultado


[, int tipo_resultado])

object mysql_fetch_object (int result)

array mysql_fetch_lengths (int resultado)

int mysql_data_seek (int resultado,


IT Colima Ene-Jun 2009 132
int numero_fila)
2.8.5. BD. Extraer información.
Ejemplos.

while ($fila = mysql_fetch_array($asignaturas))


{
echo $fila[‘codigo’] . ‘ ‘ . $fila[‘nombre’] . “\n”;
}

while ($fila = mysql_fetch_object($asignaturas))


{
echo $fila->codigo . ‘ ‘ . $fila->nombre . “\n”;
}

IT Colima Ene-Jun 2009 133


3.9. Acceso a BD unificado.
Clase ConexionGenerica.

class ConexionGenerica {
var $link;

function connect($servidor, $usuario, $clave) {


echo "<h1>El m&eacute;todo <i>connect</i> ",
"no est&aacute; implementado en la ",
"clase <i>".get_class($this)."</i></h1>";
return FALSE;
}

function close() {}
function select_db($base_datos) {}
function query($query) {}
function fetch_array($resultado) {}
function free_result($resultado) {}
IT Colima Ene-Jun 2009 134
}
3.9. Acceso a BD unificado.
Clase ConexionMySQL.

require ("ConexionGenerica.inc");

class ConexionMySQL extends ConexionGenerica {

function connect($servidor="localhost",
$usuario="nobody", $clave="") {
return $this->link = mysql_connect($servidor,
$usuario, $clave);
}

function close() {}
function select_db($base_datos) {}
function query($query) {}
function fetch_array($resultado) {}
function free_result($resultado) {}
IT Colima Ene-Jun 2009 135
}
3.9. Acceso a BD unificado. Uso.

// Fichero CreaConexion.inc
require ("ConexionMySQL.inc");
$conexion = new ConexionMySQL();

require ("CreaConexion.inc");

$conexion->connect("localhost", "nobody");
$conexion->select_db("prueba", $link);

$asignaturas = $conexion->query("SELECT codigo, nombre,


descripcion,
creditos, tipo
FROM asignatura");
IT Colima Ene-Jun 2009 136

Das könnte Ihnen auch gefallen