PHP

Enlace a classroom

Código del curso de PHP y MYSQL

Qué es PHP

Lenguaje de programación, también llamado de script que se ejecuta del lado servidor

Lenguaje de script

Documento de texto donde colocamos instrucciones u órdenes que luego serán ejecutadas por un dispositivo inteligente

Servidor

Un servidor o server, en el lenguaje informático, es un ordenador y sus programas, que están al servicio de otros ordenadores. El servidor atiende y responde a las peticiones que le hacen los otros ordenadores. Los otros ordenadores, que le hacen peticiones, serán los clientes del servidor.

Tags

<?php 
  // Forma recomenda de 
?>

<? 
  // Admitido desde PHP 7 siempre y cuando la directiva short_open_tag se encuentre en on (fichero php.ini)
?>

Otras formas

<script language = “php”>
  // Tu código aquí
</script>
<%
  Tu código aquí
%>

Comentarios

# Comentario  de una línea
// Otra forma de comentar en una línea
/*
  Comentario 
  en más de una línea
*/

Saber características de PHP

phpinfo()

Tipos de datos

PHP igual que JavaScript es un lenguaje débilmente y dinámicamente tipado, por lo tanto no suele utilizar palabras reservadas para indicar el tipo de dato.

Esto no quiere decir que no existan los tipos de datos:

  • String: Cadena de texto
  • Integer: Numeros enteros
  • Double: Numeros con decimales
  • Boolean: Verdadero o Falso (true / false)
  • Array: Arreglo
  • Object: Objeto
  • Class: Clase
  • Null: Cuando a una variable aun no se le ha asignado ningun valor

Para saber el tipo de dato disponemos de la función gettype($variable)

Funciones de depuración

print_r(true); // 1
var_dump(true); // bool(true)
gettype('Xurxo'); // string

Arrays

Funciones de arrays

$semana = array('Lunes','Martes','Miércoles','Jueves','Viernes','Sábado');

// Otra manera
$diasSemana = ['Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'];

// Array asociativo
$notas = ['Antonio' => 5, 'Juanjo' => 8, 'Teresa' => 9];

extract()

(PHP 4, PHP 5, PHP 7, PHP 8). php.net

extract — Importar variables a la tabla de símbolos actual desde un array

$notas = ['Antonio' => 5, 'Juanjo' => 8, 'Teresa' => 9];
extract($notas);

echo $Antonio; // 5

Variables globales

$_REQUEST, $_POST, $_GET

Arrays asociativos que permiten acceso a las variables pasadas a través de un formulario dependiendo del método del envío

Funciones de cadena

# trim()  limpiamos los espacios en blanco por la izquierda y la derecha
# strlen() longitud de un string
# substr() extraemos texto
# strtoupper() pasamos a mayúsculas
# strtolower() pasamos a minúsculas
# strpos() posición / índice de una parte de la cadena

Operaciones

  • Comprobar si un formulario fue envíado
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // Gestionamos formulario con método POST
}
  • Otra marera de comprobar si un formulario fue envíado

Se pulsó un botón con el atributo "name" y el método de envío es "post"

if (isset($_POST['enviar'])) { // isset() es un función que comprueba si una variable fue definida
  // Gestionamos formulario
}

Convierte caracteres especiales en entidades HTML

Expecialmente útil para evitar inyección de código malicioso en nuestras páginas.

$texto = '<script>alert("Toma virus")<script>'
htmlspecialchars($texto);

Formularios

Atributo action del formulario. Forma correcta de poner la url

<form action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>">
  <textarea name="comentarios" cols="30" rows="10" placeholder="Sus comentarios aquí"><?=$comentarios??''?></textarea>
  <br>
  <button>Enviar</button>
</form>

Sanitizar controles de formularios para evitar injección de código malicioso por script

<?php
$number_string = '12.34';

echo filter_var( $number_string, FILTER_SANITIZE_NUMBER_FLOAT ); // 1234

echo filter_var( $number_string, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); // 12.34
?>

Envíos de email

mail

<?php
$para      = 'nobody@example.com';
$titulo    = 'El título';
$mensaje   = 'Hola';
$cabeceras = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($para, $titulo, $mensaje, $cabeceras);
?>

Clases

Una clase no es más que una plantilla o un abstracción de una entidad del mundo real que pretendemos modelizar.

class Contador {
  private int $cuenta = 0;
  public int $intervalo = 1;

  function __construct (int $number) {
    $this->cuenta = (int) $number;
  }
}

En el ejemplo anterior hemos visto una clase llamada Contador del que podemos obtener o instanciar varios objetos contadores.

El método contructor nos permite crear un objeto con un estado inicial. En el ejemplo de abajo creamos dos contadores. Uno con la propiedad $cuenta con valor 0 y el otro con 1.

$contador1 = new Contador(0);
$contador2 = new Contador(1);

Tanto las propiedades (variables de una clase) como los métodos (funciones de una clase) pueden ser públicos o privados.

Una propiedad o método público pueden ser accedidos desde fuera del objeto:

echo $contador->intervalo;  // 1

En cambio una propiedad o método privado sólo pueden ser accesibles desde el interior de la clase

echo $contador->cuenta;  // Undefined property '$cuenta'.

Encapsulamiento

Decimos que el encapsulamiento en la programación orientada a objetos es cuando limitamos el acceso o damos un acceso restringido de una propiedad a los elementos que necesita un miembro y no a ninguno más.

Ejemplos:

  • Clases
  • Modificadores de acceso (public, private, protected)
  • getters/setters

Clases abstractas

Una clase abstracta es el mayor rango de abstracción que se puede dar una clase. Esto es, sudodicha clase sólo puede ser utilizado como plantilla y nunca puede ser instanciado.

abstract class Persona {
  public function saludo(){
    return 'Hola!';
  }
}

class Estudiante extends Persona {

}

$carlos = new Estudiante;
echo $carlos->saludo();

Variable global $_SESION

$_SESSION Se trata de una array asociativo que contiene variables de sesión del actual script. Es una variable superglobal lo que quiere decir que su scope es accesible desde cualquier parte del script. Un sesión durá lo que esté abierto el navegador

<?php

// Creating New Session
session_start();

/*Si tu no abres previamente la sesión la variable glogal $_Session no se podrá utilizar*/

$_SESSION["xurxo"]='logged';

?>

Algunar variables globales interesantes

<?php
define('HOST', $_SERVER["HTTP_HOST"]);  //ej --> localhost
define('RUTA_DOCUMENTO',$_SERVER['DOCUMENT_ROOT']) ;//C:/Users/xurxo/Desktop/CURSO_MF0492_3/php/PROYECTOS/CUSTOMER
define('PROTOCOL',(stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0) ? 'https://' : 'http://'); // ej --> http://
define('PAGINA_ACTUAL', PROTOCOL.HOST.$_SERVER["PHP_SELF"]); //ejemplo --> http://localhost/contacto.php
define('CSS',PROTOCOL.HOST.'/css/');
define('JS',PROTOCOL.HOST.'/js/');
define('PAGINA_PUBLICA',PROTOCOL.HOST);
define('ENLACE_ACTUAL', PROTOCOL.HOST.$_SERVER["REQUEST_URI"]); //ejemplo --> http://localhost/contacto.php?nombre=Xurxo
?>

Exensiones VSC

  • PHP Server
  • PHP Intelephense
  • PHP Debug

Ejercicios

Ejercicios adicionales

  1. Cuestionario

Wordpress con al API

Suponiendo un fichero acceso.php en la ruta raíz de la instalación de wordpress

<?php
require_once('wp-config.php');
require_once('wp-includes/user.php');
$user = wp_authenticate_username_password(null, 'xurxo', 'Tq0xuxvBMs');
// print_r($userData->user_pass);
print_r($user);