PHP 7¶
Última edición el día 2020-12-14 a las 20:52.
Esta es la documentación que he recopilado para trabajar con PHP 7, el lenguaje de la web y uno de los mas usados para desarrollo backend.
Índice
Elementos básicos del lenguaje¶
Comentarios¶
Los comentarios se pueden realizar de dos tipos:
Comentarios de una sola línea:
// Comentario de una sola línea
Comentarios multilínea:
'''
/* Este comentario
tiene más de una línea.
Puede servir para escribir
un manual u otras cosas.
*/
'''
Estructura en php¶
La estructura de PHP 7 se presenta de un modo similar a lenguajes como C o Perl:
Un vistazo a PHP puro:
// el código php se inicia siempre con su simbolo menor que interrogación y php:
<?php
// declaramos las variables usando una llave y podemos inicializarlas directamente:
$variable = 20;
// en condicionales o estructuras de control es identico a otros lenguajes:
if($valor == 20){
echo "el valor es igual";
}
?> // y finaliza del mismo modo
Ejecutando código php junto a HTML:
<?php
// podemos tener código php incrustado en HTML gracias a sus símbolos de inicio y fin:
$titulo = "practicando PHP";
?>
<html>
<head>
</head>
<body>
<!-- E incrustar valores impresos en etiquetas html entre otras cosas: -->
<h1><?php echo $titulo; ?></h1>
</body>
</html>
También podemos cargar etiquetas HTML con PHP:
<?php
echo "<p>Etiqueta incrustada desde php</p>";
?>
Otro dato importante como en la mayoría de lenguajes hay que evitar la ausencia de ; ya que en algunos casos no da error pero en otros si.
Atención
Para cargar los archivos PHP correctamente desde el navegador deben estar alojados en la carpeta del directorio web.
Ejecución¶
Existen dos métodos para ejecutar código PHP:
El primero y mas común es cargar el archivo desde la url en el servidor local o remoto.
El segundo es ejecutandolo desde PHP-CLI, por ejemplo:
php hola.php
. Muy útil para probar partes del código.
Importante
Para utilizar PHP-CLI tenemos que instalarlo ejecutando sudo apt install php7.4-cli
Información de nuestro servidor¶
Si queremos conocer la información de nuestro servidor basta con crearnos un archivo con el nombre por ejemplo info.php y añadir la siguiente función:
<?php
phpinfo();
?>
Abrimos el archivo en el navegador desde el servidor y se mostrará toda la info de este.
Documentación de PHP oficial¶
La documentación oficial de php nos brinda cientos de funciones que pueden ayudarnos en nuestro día a dia.
Podemos acceder en el siguiente enlace.
Palabras reservadas de PHP 7¶
En php existen las siguientes palabras reservadas:
__halt_compiler()
abstract
and
array()
as
break
callable
clase
catch
class
clone
const
continue
declare
default
die()
do
echo
else
elseif
empty()
enddeclare
endfor
endforeach
endif
endswitch
endwhile
eval()
exit()
extends
final
finally
for
foreach
function
global
goto
if
implements
include
include_once
instanceof
insteadof
interface
isset()
list()
namespace
new
or
print
private
protected
public
require
require_once
return
static
switch
throw
trait
try
unset()
use
var
while
xor
yield
yield from
Variables y tipos de datos¶
Variables¶
Las variables se definen de forma similar a Perl, con una llave inicial.
Ejemplo:
<?php
$variable = "contenido de variable";
?>
Atención
Es imprescindible almacenar contenido en las variables para que no genere errores. Por ejemplo poner unas comillas «».
Constantes¶
Para definir constantes tenemos que recurrir a una función llamada define()
Ejemplo:
<?php
// Recibe dos parámetros, el primero el nombre de la constante en mayúsculas y el segundo el valor.
define("NOMBRE", "Ariana");
?>
Tipos de datos primitivos¶
Los tipos de datos mas comunes son los siguientes:
Tipo de dato |
Denominación |
Ejemplo |
---|---|---|
string |
Cadena de texto |
“cadena”, «cadena» |
integer |
Número Entero |
20, 5, -3, 0 |
float |
Número con decimales |
20.53, 12.5, -18.353 |
bool |
Verdadero o falso |
true, false |
array |
Matriz de datos |
array(“valor”, “otro_valor”) |
array asociativo |
Objeto con orden de tipo clave:valor |
array(“clave” => “valor”) |
Ejemplos:
$cadena = "Dia de paga"
$otraCadena = 'Cadena de comillas simples es lo mismo'
$entero = 27
$decimal = 22.83
$booleano = true
$array = array(2.4, true, 6, 'Metro');
$array_asociativo = array(
'nombre' => 'Guillermo',
'apellidos' => 'Granados Gómez',
'telefono' => '744607487',
'ciudad' => 'Málaga'
);
Entrada y Salida de datos¶
Para realizar la entrada de datos en PHP al ser un lenguaje definido para web se utilizan formularios y se realiza mediante POST:
Entrada de datos:
<?php
$valor = $_POST['name'];
?>
Salida de datos:
<?php
echo $valor;
?>
Luego para concatenar utilizamos el .
en cada elemento:
<?php
echo "tu nombre es " . $nombre " y vives en " . $ciudad;
?>
Operadores¶
Operadores Aritméticos¶
Los operadores aritméticos que se presentan en php son los mismos que en la mayoría de lenguajes,
+, -, *, /, %
Estos podemos utilizarlos del siguiente modo:
<?php
// Estos son los operadores aritméticos:
$suma = 5 + 8;
$resta = 3 - 2;
$multiplicar = 2 x 5;
$dividir = 4 / 2;
$resto = 20 % 5;
// Y estos son operadores de incremento y decremento:
$valor++;
$valor--;
?>
Operadores Relacionales¶
Los operadores relacionales en php son los mismos que en la mayoría de lenguajes de programación:
Operador |
símbolo |
---|---|
Mayor que |
> |
Menor que |
< |
Igual que |
== |
Mayor igual que |
>= |
Menor igual que |
<= |
Cuando hablamos del uso de un solo =
nos referimos a la asignación de un valor en una variable.
Como en muchos lenguajes, si imprimimos por consola la relación entre un valor y otro el resultado será True o False:
<?php
// Si decimos que 3 es mayor que 2
echo 3 < 2
// el resultado que sale por consola es True.
?>
Operadores Lógicos¶
En php se utilizan los mismos operadores lógicos que en la mayoría de lenguajes de programación, sin embargo presentan un aspecto diferente:
Operador |
símbolo |
condición |
---|---|---|
Y (and) |
&& |
La condición se cumple si todos son verdaderos |
O (or) |
|| |
La condición se cumple si al menos uno es verdadero |
NO (not) |
! |
La condición se cumple si es diferente a lo que se compara |
Ejemplos:
# Resultado False:
print(5 > 7 && 3 < 6)
# Resultado True:
print(5 > 7 || 3 < 6)
# Resultado True
print(6 != 3)
Asignación¶
Nos permiten asignar datos a variables. Esto ya lo hemos visto también en ejemplos anteriores:
<?php
// Podemos asignar cadenas o números:
$nombre = "Guillermo";
$numero = 8;
// Y podemos asignarle el valor de otras variables:
$otroNumero = $numero;
// Y asignar incrementos directamente a los valores que ya posean:
$numero -= 2;
$numero += 2;
$numero *= 2;
$numero /= 2;
?>
Con este último operaremos con el valor asignado sumando, restando, multiplicando o dividiendo el valor que ya posee.
Estructuras de control¶
En php disponemos de estructuras de control como if
, switch
, for
y while
.
Condicional if¶
Las condiciones sencillas en php funcionan del siguiente modo:
<?php
$saludo = 'Hola';
if ($saludo == 'Hola'){
echo 'Hola a tí también';
}
?>
También tenemos condiciones con una salida alternativa si no se cumple esta:
<?php
$nacimiento = 2003;
if($nacimiento <= 2002){
echo 'Eres mayor de edad';
}else{
echo 'Eres menor de edad';
}
?>
Condicional if-else if¶
Las condiciones compuestas nos ofrecen varios caminos posibles:
$edad = 66:
if($edad >= 18){
echo 'Eres mayor de edad';
}else if($edad < 18){
echo 'Eres menor de edad';
}else if($edad >= 65){
echo 'Ya eres un anciano';
}else{
echo 'No es una edad correcta';
Condicional Switch¶
El switch podemos utilizarlo para tomar distintos caminos fijos. Se utiliza a menudo en PHP.
<?php
$valor = 5;
switch($valor){
case (1):
echo "el número es 1";
break;
case (2):
echo "el número es 2";
break;
case (3):
echo "el número es 1";
break;
case ('Juan'):
echo "no es un número, ¡es Juan!";
break;
default:
echo "No encuentro el número";
}
?>
Bucle for¶
El bucle for en php se presenta de un modo muy similar al de lenguajes como Javascript o Perl:
Uso con rango definido:
<?php
for($i = 0; $i <= 10; $i++){
echo "repetición " . $i;
}
?>
Bucle for multidimensional:
<?php
echo "<table border='1'>";
for($i = 0; $i <= 10; $i++){
echo "<tr> ";
for($j = 0; $j <= 10; $j++){
echo "<td>" . $i . "</td>";
}
echo "</tr>";
}
echo "</table>";
?>
Bucle foreach¶
El bucle diseñado para iterar con matrices de datos en PHP, el cual es similar a for-in que se utiliza en Python o Javascript:
<?php
$matriz = array("Pedro","Luis","Antonio");
foreach($matriz as $nombres){
echo $nombres;
echo "<br>";
}
?>
Bucle while¶
El bucle While es similar a Perl o Javascript entro otros.
Ejemplo de bucle while:
<?php
$numero = 1;
while($numero <= 10){
echo "impresión numero" . $numero;
//Atención, si no establecemos un incrementador se imprimirá de forma infinita:
$numero++;
}
?>
Bucle do-while:
<?php
$numero = 1;
do {
echo "ejecucion numero " . $numero;
} while($numero == 1);
?>
Estructuras de datos¶
Matrices¶
Las matrices o arrays en PHP son bastante útiles para organizar datos.
<?php
$matriz = [1, 15, -12, 3.81, "cadena", True];
echo "Tengo " . $matriz[1] . " años";
?>
Recorrer valores de una matriz e imprimirlos con
for
:
<?php
echo "Estos son los medios de transportes disponibles: <br>";
for($i = 0; $i <= 3; $i++){
echo "- " . $transporte[$i] . "<br>";
}
?>
Ver cuantos elementos hay en una lista con
count()
:
<?php
count($matriz);
?>
Imprime un elemento de la lista por su posición:
<?php
echo $matriz;
?>
Borra el último elemento de la lista con
array_pop()
:
<?php
array_pop($matriz);
?>
Borrar un elemento por su posición con
unset()
:
<?php
unset($matriz[1]);
?>
Añadir un elemento al final de la lista con
array_push()
:
<?php
array_push($matriz, 'nocilla', 'galleras');
?>
Convertir lista a cadena de texto con
implode()
:
<?php
implode(",", $matriz);
?>
Ordenar elementos de listas por orden numérico o alfabético:
<?php
$lista = ["gato", "nocilla", "avión", "leche"]
sort($lista);
?>
Verificar si se encuentra un elemento en la lista y devuelve true o false:
<?php
echo array_search('verde', $matriz);
?>
Array Asociativos¶
Los arrays asociativos vienen a ser lo mismo que los diccionarios en Python o los Objetos en Javascript.
Se construye por pares de datos que son clave y valor del mismo modo que en Python o Javascript.
Ejemplo de uso:
<?php
// asignar datos uno a uno:
$datos['nombre'] = "Guillermo";
$datos['ciudad'] = "Málaga";
// asignar multiples valores de una vez:
$datos = array(
"nombre" => "Guillermo",
"ciudad" => "Málaga"
);
?>
Imprimir un valor del diccionario:
<?php
echo $datos['nombre'] . " de " . $datos['apellidos'];
?>
Ver la estructura del array con
print_r()
:
<?php
print_r($datos);
?>
Recuperar solo las claves del diccionario con
array_keys()
:
<?php
print_r(array_keys($array));
?>
Recorrer e imprimir todos los elementos del array asociativo:
<?php
foreach($datos as $dato){
echo $dato . " ";
}
?>
Recorrer e imprimir todos los elementos por clave => valor:
<?php
foreach($datos as $clave => $valor){
echo $clave . ": " . $valor . "\n";
}
?>
Arrays asociativos multidimensionales¶
Los arrays asociativos multidimensionales son similares a arrays de objetos o listas de diccionarios según que lenguaje.
Añadiendo los valores de forma manual:
<?php
// Añadir manualmente los distintos objetos de la matriz multidimensional:
$datos[0]['nombre'] = "Eduardo";
$datos[0]['apellidos'] = "Lopez Aguirre";
$datos[0]['telefono'] = "667248135";
$datos[0]['ciudad'] = "Sevilla";
$datos[1]['nombre'] = "Antonia";
$datos[1]['apellidos'] = "Martinez Santos";
$datos[1]['telefono'] = "67748970";
$datos[1]['ciudad'] = "Cádiz";
$datos[2]['nombre'] = "Enrique";
$datos[2]['apellidos'] = "Casas Nuñez";
$datos[2]['telefono'] = "609752147";
$datos[2]['ciudad'] = "Madrid";
// Para imprimir hacemos lo mismo que arriba pero añadiendo el índice correspondiente:
echo "Me llamo " . $datos[1]['nombre'] . " " . $datos[1]['apellidos'] . " soy de " . $datos[1]['ciudad'] . " y mi número de teléfono es: " . $datos[1]['telefono'];
?>
Añadiendo los valores de forma masiva:
<?php
// Añadir manualmente los distintos objetos de la matriz multidimensional:
$datos = array(
0 => array(
'nombre' => "Eduardo",
'apellidos' => "Lopez Aguirre",
'telefono' => "667248135",
'ciudad' => "Sevilla"
),
1 => array(
'nombre' => "Antonia",
'apellidos' => "Martinez Santos",
'telefono' => "67748970",
'ciudad' => "Cádiz"
),
2 => array(
'nombre' => "Enrique",
'apellidos' => "Casas Nuñez",
'telefono' => "609752147",
'ciudad' => "Madrid"
)
);
// Del mismo modo podemos imprimir los valores:
echo "Me llamo " . $datos[2]['nombre'] . " " . $datos[2]['apellidos'] . " soy de " . $datos[2]['ciudad'] . " y mi número de teléfono es: " . $datos[2]['telefono'];
?>
Recorrer array multidimensional asociativo con foreach¶
Gracias al uso del foreach nuestro trabajo siempre será mas sencillo aunque se trate de un array multidimensional:
<?php
// Añadir manualmente los distintos objetos de la matriz multidimensional:
$datos = array(
0 => array(
'nombre' => "Eduardo",
'apellidos' => "Lopez Aguirre",
'telefono' => "667248135",
'ciudad' => "Sevilla"
),
1 => array(
'nombre' => "Antonia",
'apellidos' => "Martinez Santos",
'telefono' => "67748970",
'ciudad' => "Cádiz"
),
2 => array(
'nombre' => "Enrique",
'apellidos' => "Casas Nuñez",
'telefono' => "609752147",
'ciudad' => "Madrid"
)
);
echo "<table border='1'>";
echo "<tr>
<td> Nombre </td>
<td> Apellidos </td>
<td> Teléfono </td>
<td> Ciudad </td>
</tr>";
// Con foreach ya no es necesario pasarle una variable de incremento al índice porque el bucle ya recorre todo el array horizontal y verticalmente.
foreach($datos as $listado){
echo "<tr>";
echo "<td>" . $listado['nombre'] . "</td>";
echo "<td>" . $listado['apellidos'] . "</td>";
echo "<td>" . $listado['telefono'] . "</td>";
echo "<td>" . $listado['ciudad'] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
Funciones Internas¶
Como en la mayoría de lenguajes de programación, en php existen funciones predefinidas.
Funciones de cadenas¶
Aquí tenemos las funciones mas utilizadas para tratamiento de cadenas de texto:
Para saber la longitud de una cadena con
strlen()
:
<?php
$nombre = "Alba María";
echo strlen($nombre);
?>
Convertir valor numérico a cadena con
(String)
:
<?php
$numero = 27;
$cadena = (String)$numero;
echo $cadena;
?>
Convertir una cadena en una lista
explode()
:
<?php
$cadena = "Galletas,Pan,Atún,Patatas";
$matriz = explode(",", $cadena);
for($i = 0; $i < count($matriz); $i++){
echo $matriz[$i] . "\n";
}
?>
Reemplazar una cadena por otra con
str_replace()
:
<?php
$frase = "Estaba estudiando programación \n";
echo str_replace("Estaba", "Estoy", $frase);
?>
Convertir a mayúsculas la cadena con
strtoupper()
:
<?php
$frase = "Estaba estudiando programación \n";
echo strtoupper($frase);
?>
Convertir a minúsculas la cadena con
strtolower()
:
<?php
$frase = "ESTABA estudiando programación \n";
echo strtolower($frase);
?>
Funciones numéricas¶
Estas son las funciones numéricas mas comunes en php:
Convertir un valor a entero con
(int)
:
<?php
$cadena = "237";
$numero = (int)$cadena;
echo $numero;
?>
Convertir un valor a decimal con
(float)
:
<?php
$cadena = "237";
$numero = (float)$cadena + 10.25;
echo $numero;
?>
Redondear un valor decimal con
round()
:
<?php
echo round(1.95583, 2);
?>
Crear un rango de números con
range()
:
<?php
foreach (range(0, 20) as $numeros) {
echo $numeros . "\n";
}
?>
Mostrar el valor mayor de un rango con
max()
:
<?php
echo max(1, 5, 8, 3, 20);
?>
Mostrar el valor mínimo de un rango con
min()
:
<?php
echo min(1, 5, 8, 3, 20);
?>
Sumar todos los valores de un rango con
array_sum()
:
<?php
$matriz = [1, 5, 8, 3, 20];
echo array_sum($matriz);
?>
Otras funciones comunes¶
Tenemos una serie de funciones de uso común en php:
Averiguar que tipo de dato contiene una variable con
gettype()
:
<?php
$matriz = [1, 5, 8, 3, 20];
echo gettype($matriz);
?>
Trabajar las fechas con la función
date()
:
<?php
echo "Dia: " . date('d') . "<br>";
echo "Inicial del día: " . date('D') . "<br>";
echo "Día de la semana: " . date('l') . "<br>";
echo "Días transcurridos desde que comenzó el año: " . date('z') . "<br>";
echo "Semanas transcurridas desde que comenzó el año: " . date('W') . "<br>";
echo "Mes en el que estoy: " . date('m') . "<br>";
echo "Mes en el que estoy sin cero: " . date('n') . "<br>";
echo "Iniciales del mes el que estoy sin cero: " . date('M') . "<br>";
echo "Dias que tiene el mes en el que estoy: " . date('t') . "<br>";
echo "Año en el que estoy: " . date('Y') . "<br>";
echo "Año abreviado: " . date('y') . "<br>";
// Si nos da 0 es false y si da 1 es true:
echo "Saber si es año bisiesto: " . date('L') . "<br>";
echo "Fecha formato ISO-8601: " . date('c') . "<br>";
// Este formato es ideal para almacenar fechas en bases de datos:
echo "Hora UNIX: " . date('U') . "<br>";
// AJUSTES DE TIEMPO:
echo "Hora AM o PM: " . date('a') . "<br>";
echo "Hora AM o PM en mayúsculas: " . date('A') . "<br>";
echo "Hora en formato Swatch Internet Time : " . date('B') . "<br>";
echo "Hora en formato 12: " . date('g') . "<br>";
echo "Hora en formato 24: " . date('G') . "<br>";
echo "Hora formato 12 con 0 inicial: " . date('h') . "<br>";
echo "Hora formato 24 con 0 inicial: " . date('H') . "<br>";
echo "Minutos con cero: " . date('i') . "<br>";
echo "Segundos con ceros: " . date('s') . "<br>";
echo "Microsengundos: " . date('u') . "<br>";
echo "Zona temporal: " . date('e') . "<br>";
// 0 false, 1 true:
echo "Horario de sol reducido: " . date('I') . "<br>";
echo "Desfase frente al meridiano de Greenwitch: " . date('O') . "<br>";
?>
Comprobar si existe una variable con
isset()
y eliminarla conunset()
:
<?php
$valor = "X";
echo "La variable tiene un valor igual a " . $valor . "<br>";
unset($valor);
if(isset($valor)){
echo "La variable tiene un valor igual a " . $valor . "<br>";
}else{
echo "Ya no tiene ningún valor";
}
?>
Funciones¶
Las funciones en php se declaran del siguiente modo:
<?php
function saludar(){
echo "Hola amigo";
}
// ejecutar función:
saludar();
?>
Recibir parametros en una función:
<?php
function tablas($numero){
for($multiplicar = 0; $multiplicar <= 10; $multiplicar++){
echo $numero . " x " . $multiplicar . " = " . $numero * $multiplicar . "<br>";
}
}
tablas(5);
?>
Ambito en funciones¶
El ambito de las funciones en php nos facilita el uso de variables que se encuentran fuera de una función para poder manejarlas sin tener que pasarlas por parámetros.
ejemplo:
<?php
// esto es una variable que se encuentra fuera de la función
$saludo = "Hola amigo";
function saludar(){
// para recuperarla sin pasarla por parámetros podemos usar el modificador global:
global $saludo;
echo $saludo;
}
saludar();
?>
Recibir parametros infinitos añadiendo
*
a un parametro:def miFuncion(*unNombre): for persona in unNombre: print("Se llama {}".format(persona)) miFuncion("Pepe", "Antonio", "Alfredo")
Variables predefinidas¶
PHP cuenta con un set de variables predefinidas disponibles en cualquier parte del programa para tratar distintos aspectos como peticiones GET y POST, recuperar archivos con FILES, etc.
Variable GET¶
Con $_GET Recuperamos la información recibida por parametros en la barra de navegación. Esto muestra la información que recibimos como ya es de saber:
<form method="GET">
<label for="nombre">Introduce tu nombre</label>
<input type="text" name="nombre">
<br>
<input type="submit" value="Mostrar">
</form>
<?php
echo "Tu nombre es " . $_GET['nombre'];
?>
Variable POST¶
Podemos enviar los datos via post y utilizar la variable $_POST para recuperarlos:
<form method="POST">
<label for="nombre">Introduce tu nombre</label>
<input type="text" name="nombre">
<br>
<input type="submit" value="Mostrar">
</form>
<?php
echo "Tu nombre es " . $_POST['nombre'];
?>
Variable SERVER¶
Con la variable $_SERVER podemos recuperar información de quien visita la web.
Estas son algunas de las cosas que podemos recuperar:
<?php
// Para saber la ip del visitante:
$ip = $_SERVER['REMOTE_ADDR'];
echo "Tu ip es: " . $ip . "<br>";
// Para saber el puerto que esta usando el cliente:
$puerto = $_SERVER['REMOTE_PORT'];
echo "Estas usando el puerto: " . $puerto . "<br>";
// Para saber la ip del servidor:
$serverIP = $_SERVER['SERVER_ADDR'];
echo "La ip del servidor es: " . $serverIP . "<br>";
// Para saber el nombre del Servidor (por defecto la ip de este si no tiene nombre definido):
$host = $_SERVER['SERVER_NAME'];
echo "El nombre del servidor es: " . $host . "<br>";
//Para saber el navegador:
$navegador = $_SERVER['HTTP_USER_AGENT'];
echo "Tu navegador es: " . $navegador . "<br>";
//Para saber el archivo donde te encuentras de la web:
$ruta = $_SERVER['PHP_SELF'];
echo "Estas en: " . $ruta . "<br>";
//El metodo con el que se esta procesando la url:
$metodo = $_SERVER['REQUEST_METHOD'];
echo "Se esta usando el Método: " . $metodo . "<br>";
//Ver la url que se utilizo para realizar la petición:
$uri = $_SERVER['REQUEST_URI'];
echo "Se esta usando el Método: " . $uri . "<br>";
//Visualizar la raiz del directorio donde se encuentra el archivo:
$raiz = $_SERVER['DOCUMENT_ROOT'];
echo "La raiz del servidor es: " . $raiz . "<br>";
//Ofrece un valor no vacío si la petición se realiza en https:
$peticion_segura = $_SERVER['HTTPS'];
echo "Se vera algo si estamos usando https: " . $peticion_segura . "<br>";
?>
Variable FILES¶
La variable $_FILES recupera un archivo subido desde un formulario.
Ejemplo de uso:
<form method="POST" enctype="multipart/form-data">
<input type="file" name="archivo">
<input type="submit" value="cargar">
</form>
<?php
echo "<pre>";
print_r($_FILES['archivo']);
echo "</pre>";
?>
Variable SESSION¶
La variable $_SESSION se utiliza para recordar datos en el navegador del cliente como usuarios, procesos de compras y otras cosas.
Ejemplo de uso:
<?php
// Para poder invocar en cualquier parte de nuestro sitio una variable de sesión tenemos que inicializar la sesión:
session_start();
// La asignamos a una variable de sesión:
$_SESSION['info'] = "Información importante";
// Y ahora podemos utilizar las variables de sesión:
echo $_SESSION['info'];
// Si queremos borrar las variables de sesión de nuestra web utilizamos este parametro:
session_destroy();
?>
Clases¶
PHP se ha ido adaptando al paso del tiempo desde su propósito inicial como lenguaje de servidor hasta llegar a alcanzar una sintaxis muy parecida a otros lenguajes de alto nivel. Entre estas mejoras ya disponemos del paradigma orientado a objetos.
Creación de clases con atributos, metodo y creación del objeto:
<?php
// creamos la clase:
class Persona {
// Definimos los atributos y el ámbito si son publicos o privados:
public $nombre;
public $edad;
// Definimos el constructor:
function __construct($nombre, $edad){
$this->nombre = $nombre;
$this->edad = $edad;
}
// Y definimos abajo los métodos:
function saludar(){
echo "Te llamas " . $this->nombre . " y tienes " . $this->edad . " años.";
}
}
// crear objeto:
$persona = new Persona("Agustín", 32);
// acceder a sus atributos:
echo $persona->nombre . "\n";
// acceder a sus métodos
$persona->saludar();
?>
Importante
Los atributos siempre tienen que llevar un modificador de acceso como public o private o protected pero los metodos si no lo definimos por defecto son public.
Tipos de encapsulación en PHP¶
Existen tres tipos de encapsulación en PHP:
public: los atributos y métodos son publicos y por tanto se puede acceder a ellos una vez creado el objeto.
private: los atributos y metodos no pueden ser llamados o modificados desde el objeto.
protected: los atributos y metodos solo pueden ser llamados o modificados desde la clase.
Get y Set¶
Cuando manejamos atributos y métodos privados lo que utilizamos para ver o modificar estos es una convención llamada getter y setter la cual se basa en la creación de metodos públicos que sirven solo para esos fines.
<?php
// creamos la clase:
class Persona {
// Establecemos los métodos como privados:
private $nombre;
private $edad;
private $clave = "Fo372SA";
function __construct($nombre, $edad){
$this->nombre = $nombre;
$this->edad = $edad;
}
function saludar(){
echo "Te llamas " . $this->nombre . " y tienes " . $this->edad . " años.";
}
// para acceder a los métodos ahora usamos get:
function get_nombre(){
return $this->nombre;
}
function get_edad(){
return $this->edad;
}
// para modificar los atributos usamos set:
function set_nombre($nombre){
$this->nombre = $nombre;
echo "Se ha cambiado el nombre por " . $this->nombre . "\n";
}
function set_edad($edad){
$this->edad = $edad;
echo "Se ha cambiado la edad por " . $this->edad . "\n";
}
// a este método no se puede acceder desde el objeto:
private function ver_clave(){
echo "La clave es: " . $this->clave;
}
// para ello usaremos un get:
function get_clave(){
$this->ver_clave();
}
}
$persona = new Persona("Agustín", 32);
// Ver los atributos:
echo $persona->get_nombre();
echo "\n";
echo $persona->get_edad();
echo "\n";
// modificar los atributos:
$persona->set_nombre("Paquito");
$persona->set_edad(47);
// para ejecutar un metodo privado usamos un get:
$persona->get_clave();
?>
Importante
tanto Get como Set son convenciones para definir estos métodos de acceso a atributos y metodos privados pero en realidad son metodos normales.
Herencia¶
La herencia en PHP es similar a lenguajes como Java o C#:
<?php
// creamos una clase padre:
class Animal{
public $especie;
public $edad;
function __construct($especie, $edad){
$this->especie = $especie;
$this->edad = $edad;
}
function info(){
echo "Nuestro animal es un " . $this->especie . " y tiene " . $this->edad . " años \n";
}
}
// ahora creamos una clase hijo:
class Humano extends Animal{
// el hijo tiene sus atributos y metodos:
public $nombre;
function __construct($nombre, $edad){
$this->nombre = $nombre;
// pero también tenemos los metodos y atributos del padre:
$this->especie = "Humano";
$this->edad = $edad;
}
function saludo(){
echo "Me llamo " . $this->nombre . " y tengo " . $this->edad . " años.\n";
}
}
// con el padre tenemos una serie de atributos y métodos:
$animal = new Animal("León", 7);
$animal->info();
// que con el hijo podemos utilizar:
$humano = new Humano("Paco", 27);
// podemos usar sus propios metodos:
$humano->saludo();
// y podemos llamar a metodos del padre en el hijo:
$humano->info();
?>
Importante
En la herencia de clases existe otro concepto llamado polimorfismo y se basa en reutilizar los metodos de las clases padre para modificarlos en las clases hijo de forma que podemos reutilizarlos sin necesidad de crear unos nuevos.
Atributos y Métodos estáticos¶
Los atributos y métodos estáticos en PHP son aquellos que se pueden acceder sin crear un objeto fuera de la clase con el uso de ::.
Estos métodos llevan un segundo modificador llamado static
justo después de public
:
<?php
class Preguntas{
// atributo estatico disponible:
public static $nombre = "Augusto";
// metodo estatico disponible:
public static function hacerPregunta(){
echo "¿Cómo te llamas?";
}
}
// uso de metodo estático:
Preguntas::hacerPregunta();
echo "\n";
// uso de atributo estatico:
echo "Me llamo " . Preguntas::$nombre;
?>
Manejor de archivos¶
En php podemos crear y modificar archivos con la función fopen()
:
Cuando abrimos un archivo en php siempre asignamos un permiso:
Permiso |
Nomenclatura |
---|---|
Escritura |
w - w+ |
Lectura |
r - r+ |
Actualización |
a - a+ |
En el caso de escritura:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$navegador = $_SERVER['HTTP_USER_AGENT'];
$contenido = date('U') . " - Fecha: " . date('Y/m/d - H:i:s') . " - Navegador: " . $navegador . " - IP: " . $ip ."\n";
// establecemos el nombre de archivo que vamos a editar:
$archivoLogs = 'logs.dat';
// abrimos con permisos de creación extras:
$manejador = fopen($archivoLogs, 'w+');
// escribimos los cambios:
fwrite($manejador,$contenido);
?>
En caso de lectura:
<?php
$archivoLogs = 'logs.dat';
// abrimos el archivo con permisos de lectura:
$manejador = fopen($archivoLogs, 'r');
// establecemos la condición con fgetcsv() de manera que los dividirá:
while($datos = fgetcsv($manejador,1000000, "-")){
echo "<pre>";
print_r($datos);
echo "</pre>";
}
fclose($manejador);
?>
En caso de actualización:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$navegador = $_SERVER['HTTP_USER_AGENT'];
$contenido = date('U') . " - Fecha: " . date('Y/m/d - H:i:s') . " - Navegador: " . $navegador . " - IP: " . $ip ."\n";
// establecemos el nombre de archivo que vamos a editar:
$archivoLogs = 'logs.dat';
// abrimos con permisos de actualizacion extras:
$manejador = fopen($archivoLogs, 'a+');
// escribimos los cambios:
fwrite($manejador,$contenido);
?>
Conectar a bases de datos con PDO¶
PDO (PHP Data Objects) sirve para conectarse a gran cantidad de bases de datos con el mismo código ya sea MySQL, SQL Server o PostgreSQL entre otras.
Conexión a base de datos MySQL:
<?php
// preparamos los datos del servidor:
$servidor = "localhost";
$usuario = "guillermo";
$clave = "guillermo";
// preparamos la conexión eligiendo el motor mysql:
$conn = new PDO("mysql:host=$servidor;dbname=prueba", $usuario, $clave);
// realizamos la conexión:
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Conexión realizada con éxito";
// para cerrar la conexión:
$conn = null;
?>
Crear una base de datos:
<?php
$servidor = "localhost";
$usuario = "guillermo";
$clave = "guillermo";
// ignoramos elegir la base de datos al preparar conexión::
$conn = new PDO("mysql:host=$servidor", $usuario, $clave);
// realizamos la conexión:
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// preparamos la consulta:
$sql = "CREATE DATABASE pruebaSQL";
// realizamos la consulta:
$conn->exec($sql);
echo "Base de datos creada con éxito";
$conn = null;
?>
Crear una tabla:
<?php
$servidor = "localhost";
$usuario = "guillermo";
$clave = "guillermo";
$base = "prueba";
$conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE TABLE agenda(
id INT(10) AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(30) NOT NULL,
edad INT(10) NOT NULL
)";
$conn->exec($sql);
echo "Tabla creada con éxito";
$conn = null;
?>
Agregar registros a la tabla:
<?php
$servidor = "localhost";
$usuario = "guillermo";
$clave = "guillermo";
$base = "prueba";
$conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO agenda (nombre, edad) values ('Alfredo', 30)";
$conn->exec($sql);
echo "Inserción realizada con éxito";
$conn = null;
?>
Hacer varias inserciones separando los parámetros:
<?php
$servidor = "localhost";
$usuario = "guillermo";
$clave = "guillermo";
$base = "prueba";
$conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Preparar consulta para separar parametros:
$sql = $conn->prepare("INSERT INTO agenda (nombre, edad) VALUES (:nombre, :edad)");
// preparar parametros:
$sql->bindParam(':nombre', $nombre);
$sql->bindParam(':edad', $edad);
// insertar mas de un registro a la vez:
$nombre = "Antonio";
$edad = 38;
$sql->execute();
$nombre = "Eustaquia";
$edad = 73;
$sql->execute();
echo "Inserciones realizadas correctamente";
$conn = null;
?>
Leer registros de la tabla:
<?php
$servidor = "localhost";
$usuario = "guillermo";
$clave = "guillermo";
$base = "prueba";
$conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Preparar consulta y ejecutar directamente:
$sql = $conn->query("SELECT * FROM agenda")->fetchAll();
// Recorrer todos los datos:
foreach($sql as $data){
echo "- " . $data['nombre'] . "\n";
}
$conn = null;
?>
Borrar registros de la tabla:
<?php
$servidor = "localhost";
$usuario = "guillermo";
$clave = "guillermo";
$base = "prueba";
$conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Preparar consulta:
$sql = "DELETE FROM agenda WHERE id=1";
// ejecutar consulta:
$conn->exec($sql);
echo "Registro eliminado";
$con = null;
?>
Actualizar registros de la tabla:
<?php
$servidor = "localhost";
$usuario = "guillermo";
$clave = "guillermo";
$base = "prueba";
$conn = new PDO("mysql:host=$servidor;dbname=$base", $usuario, $clave);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Preparar consulta:
$sql = "UPDATE agenda SET nombre='Elvira', edad=32 WHERE id=2";
// preparar estado:
$stmt = $conn->prepare($sql);
// ejecutar consulta:
$stmt->execute();
echo "Registro actualizado";
$con = null;
?>
PDO y SQLite 3¶
Podríamos trabajar perfectamente SQLite 3 con PDO pero para ello antes tenemos que asegurarnos de dos cosas:
Primero tenemos que instalar sqlite3 en nuestro sistema:
sudo apt install php7.4-sqlite3
Luego localizamos el archivo php.ini que suele estar en /etc/php/7.4/ y dentro de las carpetas **apache2 y cli encontraremos estos archivos.
Editamos y buscamos las líneas que ponen
;extension=pdo_sqlite
y;extension=sqlite
si tienen un ; lo quitamos para habilitarlas.Conectar a una base de datos SQLite 3:
<?php
// realizamos la conexion con el motor sqlite y apuntamos directamente a la base de datos:
$db = new PDO('sqlite:datos.sqlite');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
echo "Conexión realizada con éxito";
$con = null;
?>
PHP CLI¶
Comandos útiles de PHP:
php -v: podemos ver la versión que usamos
php -m: podemos ver los moudlos cargados
php -i: podemos ver la configuración de php actual
php -r: enviar código a ejecutar ej:
echo "hola mundo"
php archivo.php: podemos ejecutar un archivo php para ver en que ámbito se ha ejecutado.
php -S: ejecutar servidor php
php -S localhost:8000
php -S -t: establecer un directorio inicial de arrance del server:
php -S localhost:8000 -t inicial/