Usuario:ManuelRomero/PHP/Resumen

Instalación

 * Apache
 * php (cli y lib)
 * mysql (cliente y servidor)
 * netbeans
 * (java)
 * debug

Sintaxis básica

 * Código embebido
 * En un mismo fichero puedo abrir y cerrar etiquetas
 * El comportamiento es como si todo es un fichero, que es lo que es
 * Variables
 * Identificadores que empiezan por $


 * Lenguaje fuertemente tipado de declaración dinámica
 * 5 tipos básicos
 * Los tipos pueden cambiar en cualquier momento

Array

 * Son estructuras o colecciones de alguna manera ordenadas de valores de cualquier tipo
 * Existen muchas funciones para trabajar con ellas
 * Definirlo

count($array) o size($array)
 * Añadir elementos en una posición concreta
 * Eliminar una posición del array
 * Se usa la conocida función unset(...)
 * Por ejemplo eliminar las posición previamente añadidas
 * Añadir elementos en una posición concreta
 * Funciones que más hemos usado con array
 * Nos dice el número de elementos de un array, que no tiene porqué coincidir con el siguiente elemento a añadir.


 * Tipos de array
 * Es importante tener clara la diferencia entre array asociativo y array indexado
 * Ambos casos son colección de elementos por que son array
 * Se diferencian en la forma que voy a indicar cada posición de los diferentes elementos
 * indexado

$misNotasIndexado =[6,7,8,7,6,7,8,7]; $misNotasIndexado =[0=>6,1=>7,2=>8,3=>7,4=>6,5=>7,6=>8,7=>7];
 * La posición de cada elemento la especifico con un número
 * Es igual que hacer
 * asociativo


 * La posición de cada elemento la especifico con una cadena de caracteres
 * En este caso a la hora de insertar un array, hay que especificar obligatoriamente en valor del índice

'''para el array $misNotasIndexado coge cada elemento y almacénalo en $nota '''para el array $misNotasIndexado coge cada indice y guardalo en $indice y cada elemento de esa posición  y almacénalo en $nota '''para el array $misNotasAsociativo coge cada indice y guardalo en la variable  $persona y cada elemento de esa posición  y almacénalo en $nota
 * Recorrer un array foreach(....)
 * Hay diferentes maneras de recorre un array, pero esta estructura es la más cómoda
 * La forma de interpretarla narrativamente sería
 * También podría acceder a los índices
 * En el caso de arrays asociativo nos interesará la mayoría de las veces acceder al valor del índice y del elemento
 * Es importante marcar que las variables $indice, $persona o $nota, son variables que creamos nosotros y pueden lógicamente tener cualquier nombre

Estructuras de control

 * Ya sabemos que hay 3 tipos de estructuras de control
 * selectivas
 * Tenemos también el llamado selector múltiple


 * Recordad que si no ponemos el braek, se ejecutarán todos los case hasta encontrar un break o fin del switch
 * La sección default es opcional y se entrará en ella si no hay coincidencia previa
 * Lo que se hace en cada case es mirar a ver si el valor de la variable coincide
 * bucle
 * Como ya sabemos tenemos tres tipos
 * El bucle clásico
 * Recordemos las tres reglas de hora (inicializar, comparar correctamente, actualizar).
 * El bucle contador
 * Ponemos un ejemplo que se va incrementando la variable de 11
 * Podemos mocificar cada una de las tres partes del for


 * El bucle que ejecuta una iteración segurao
 * Observar que en este caso al final va un ; pues separamos de la siguiente instrucción
 * Secuenciales
 * Son instrucciones que van una detrás de otra
 * Usamos el ; para separar una de otra

Leer valores

 * Para leer valores necesitamos un formulario (no es la única forma pero si la más usada)
 * Otras maneras leer de ficheros por ejemplo
 * La idea es que al hacer una solicitud web vienen también todos los contenidos de los diferentes input de un formulario
 * form
 * Recordad los atributos importantes
 * El name de los input es la forma de leer en servidor
 * Cuando hacemos click en el submit es cuando invocamos al fichero especificado
 * leer
 * Si pasamos un filtro, no podemos leer arrays.
 * Siempre leeremos como una cadena de caracteres

Expresiones

 * PHP es un lenguaje orientado a expresiones
 * Esto quiere decir que en php todo se consideran expresiones
 * una expresión es un conjunto de valores (operadorandos) y operadores
 * Los operadores actúan sobre los operandos y obtengo un valor como resultado de evaluar y realizar los cálculos de la expresión

Expresiones de asignación

 * Dan como resultado el valor que asigno

Expresiones aritméticas

 * Dan como resultado el cálculo obtenido

Expresiones booleanas

 * Esta expresión da como resultado un valor true o false
 * Puenden ser de dos tipos

comparación

 * Hay qu tener cuidado con la igualdad de valor (==) y la igualdad de valor y tipo (===)
 * Hay qu tener cuidado con la igualdad de valor (==) y la igualdad de valor y tipo (===)

http://php.net/manual/es/types.comparisons.php
 * Ver la siguiente tabla para mas detalle

lógicas

 * and && or || xor

Funciones

 * Escribir con un nombre un conjunto de instrucciones
 * Una vez descrita la puedo invocar donde quira
 * Solo las variables internas definidas como global las puedo utilizar fuera de la función con el valor que ésta hubiera dejado
 * parámetros: una función adminte parámetros que son los valores con los que la función puede operar
 * Estos valores son pasados cuando invocamos a la función


 * Pueden tener un valor por defecto, en cuyo caso si no paso valor cuando la invoque se toma ese valor


 * return, en un momento dado la función puede devolver un valor

Cookies
Recuerda como operar con ellas
 * son ficheros que se guardan el el cliente
 * Lo escribe un servidor concreto en un cliente concreto (una ip de un navegador )
 * Estos ficheros son parejas variable-valor
 * Es importante tener claro
 * 1) quién escribe la cookie (el servidor)
 * 2) donde la escribe (en el cliente : una ip en un navegador)
 * 3) qué escribe (una pareja variable = valor p.e. nombre = "maria")
 * 4) cuando la tendré displible y como. En la superglobal $_COOKIE['nombre_variable'], el servidor la recibe la próxima vez que el cliente acceda a él.
 * Escribir una coockie: esta acción escribirá una cookie en el cliente


 * Leer una coockie:


 * Borrar una cookie
 * Tendré que escribirla con un tiempo negativo

Sesiones
El cliente siempre se comunica con el servidor solicitándole una página El servidor entrega una página al cliente. Si esa página tiene código php, antes de entregarla lo ejecuta
 * Crear una variable de sesión es poder almacenar y disponer de esa variable mientras dure la conversación entre cliente y servidor
 * El cliente va enviando solicitudes al servidor y el servidor le va respondiendo
 * Cuando hablamos de enviar solicitudes, hablamos de solicitar páginas
 * Cuando hablamos de que el servidor responde, hablamos de le entrega una página solicitada
 * Cada entrega se pierde todo lo que el servidor hubiera ejecutado antes
 * Si quiero almacenar algún valor, una manera de hacerlo es con sesiones
 * crear una variable de sesion
 * Leer una variable de sesion
 * En proximas conexiones podré saber el nombre del usuario
 * Borrar una variable de sesion
 * Se elmina con la función ya conocida unset(..)

Autentificación
cd /etc/apache2/sites-eneabled sudo gedit 000-default sudo apt-get install apache2-utils cd /home/manolo htpasswd -c ficheroUsuario manolo htpasswd ficheroUsuairo alicia
 * Apache tiene un módulo que permite autentificar
 * Para usarlo, hay que realizar una serie de pasos que hay que conocer
 * Habilitar el módulo AllowOverride
 * En el fichero de confituracion de apache hay que habilitar la directiva AllowOverride
 * En nuestro caso vamos al fichero 000-default que es donde tenemos la configuración de nuestro sitio web
 * Editamos el fichero
 * Añadimos la directiva
 * Donde ponía
 * Hacemos que ponga
 * Con ello le estamos diciendo que cualquier página que haya en el directorio /var/www o cualquier subdirectorio de él, antes de que el servidor entregue la página que verifique si hay un fichero .htacces y que lo use para validar usuarios
 * Crear un fichero de usuarios
 * Para validar usuarios tendremos que tener una lista de usuarios y sus password
 * Se crean con la herramienta htpasswd
 * Si no está instalada se instala
 * Nos ubicamos en el directorio donde queremos crear el fichero de usuarios y password
 * Ahora creo el fichero (la primera vez con -c para crear el fichero, las siguientes sin -c
 * Me pedirá luego pass de manolo
 * Esto creará un fichero llamado ficheroUsuario con el usuario manolo
 * Ahora añadimos más usuarios
 * Y así sucesivamente. Observa que -c ya no aparece
 * establecer el fichero .htaccess en el directorio que quiero aplicar seguridad
 * En el directorio donde haya páginas que queremos que se pidan usuario y password para poder acceder a ellas, hay que poner un fichero llamado .htaccess
 * El contenido del fichero debe ser el siguiente
 * AuthName Es el texto que aparecerá en el formulario que saldrá para autentificarnos
 * AuthType Tipo de autentificación puede ser Basic o Digest, en nuestro caso Basic
 * AuthUserFile El fichero que antes hemos creado con la lista de usuarios
 * Require Para qué usuarios voy a dar permiso que accedas, previa identificación, es decir para otros usuarios aunque se acrediten no les dará acceso. valid-user especificaría todos los usuarios. En el ejemplo solo a sara y maria se les dejará acceso
 * Con esto ya funcionaría
 * Apache se encarga de sacar un formulario para que el usuario se autentifique en caso de que en el direcctorio donde se encuentra la página que el usuario ha solicitado se encuentre un fichero .htaccess
 * Si ese usuario está en la lista de ''Require' y aporta de forma correcta el nombre y pass se le entregraá la página, en otro caso no

Concretamente los índices PHP_AUTH_UER Y PHP_AUTH_PW
 * Lanzar el formulario de autentificación de apache
 * Alternativamente podemos decir a apache que antes de entregar la página lance un formulario
 * En nuestro programa leeremos el usuario y password que el usuario aporte
 * Comparamos esos valores con los valores que consideremos (posteriormente los podemos buscar en una base de datos)
 * Y en función de esos valores decidimos en nuestro programa qué hacer (si le dejamos seguir o no a ese usuario)
 * Enviar el formulario: es decir que apache envie el lugar de la página un formulario para que el usuario se autentifique
 * Esto enviaría un formulario al cliente y si le da al botón cancelar mostraría el echo y saldría
 * Pero claro si ya ha aportado el valor en el usuario no quiero volver a sacar el usuario, por lo que tendría que tener un if del tipo (si no ha enviado usuario muestra el formulario). Para ello tenemos que saber como leer el contenido de este usuario
 * Leer los datos del formulario 401: para leer los datos de ese formulario
 * La matriz asociativa variable superglobal $_SERVER contiene esta información
 * Por lo que el código correcto sería
 * Una forma de validar un usuario que se llame manolo y pass manolo sería

Objetos

 * Para crear objetos tengo que definir una clase
 * Definir o crear una clase es escribir cual va a ser la estructura de un componente software que va a tener una identidad (unos valores que lo definine un un comportamiento o acciones que sabrá hacer), dentro del programa
 * Es bueno crear cada clase en un fichero que se llame como la clase
 * Se recomienda empezar en mayúsculas en nombre de la clase

atributos

 * Detallan las características del objeto, lo que le va a diferenciar uno de otro
 * Por ejemplo el objeto Racional 5/6 es diferente del objeto Racional 7/9
 * Lo vemos porque tienen valores diferentes
 * Se definen como variables normales en php


 * Se recomienda que sean privados

métodos

 * Detallan el comportamiento o las cosas que los objetos de esa clase van a saber hacer
 * Se declaran como funciones normales de php

$this

 * Para poder acceder a los elementos de una clase usaremos la seudovariables $this
 * Es una manera de especificar que estoy accediendo al elemento concreto del objeto que se esté ejecutando en ese momento

concepto de sobrecarga

 * En php no existe la sobrecarga como tal
 * He de evaluar el valor de los parámetros y en función de ello hacer una cosa u otra

Encapsulacion: delimitadores de acceso

 * Lo implementan las palabras reservadas
 * private
 * Son elementos a los que solo el se puede acceder dentro de la clase
 * public
 * Son elementos a los que se puede acceder desde cualquire sitio que exista el objeto
 * protected
 * Para el exterior es como privado, para clases que se implementen con herencia son como públicos

constructor

 * Es el método __construct que siempre que cree un objeto de la clase se va a ejecutar.
 * En el podemos hacer todo lo que queremos que se haga cuando creamos un objeto de la clase.
 * Normalmente nos preocuparemos que de los atributos de la clase tengan los varlores correspondientes.

métodos mágicos

 * Son métodos que sabemos que en determinadas circunstancias son invocados
 * Si los tenemos implementados en nuestra clase, se ejecutará su contenido
 * Si no no ocurrirá nada, o sea que no es obligatorio que los tengamos implementados
 * Los 4 que hemos visto son
 * __construct
 * Se invoca siempre que creemos un objeto con el operador new
 * __call ($metodo, $parametros)
 * Se invoca siempre que invoquemos a un método que no existe en la clase
 * El primer argumento es el nombre del método invocado
 * El segundo argumento es un array indexado con los parámetros del método
 * __toString
 * Cuando en el códgio se necesita convertir el objeto en un string
 * __destruct
 * Caundo el objeto se destruye