Aprende PHP desde cero – Instalación LAMP – Variables, arrays, cadenas y estructuras de control



Aprende PHP desde cero – Instalación LAMP – Variables, arrays, cadenas y estructuras de control

0 0


CursoPHP


On Github MilkZoft / CursoPHP

Aprende PHP desde cero

Instructor: Carlos Santana / @czantany

Instalación LAMP

Instalación en Windows & Mac Instalación en Linux

Instalación en Windows & Mac

Para Windows & Mac lo más sencillo es instalar un paquete que contenga todas las herramientas que necesitamos, algunas de ellas son: -EasyPHP (Windows) -MAMP (Mac) -WAMP (Windows) -XAMP (Mac & Windows)

Instalación en Linux

sudo apt-get install php5 libapache2-mod-php5 mysql-server mysql-client apache2 php5-mysqli phpmyadmin sudo vi /etc/apache2/apache.conf Agregar la siguiente línea: Include /etc/phpmyadmin/apache.conf sudo vi /etc/phpmyadmin/apache.conf Agregamos "AllowOverride All" dentro de <Directory /usr/share/phpmyadmin> service apache2 restart

Variables, arrays, cadenas y estructuras de control

Tipos de datos Manejo de variables Arrays escalares y asociativos Manejo de cadenas Estructuras de Control Operadores

Tipos de datos

PHP soporta ocho tipos primitivos.

  • boolean
  • integer
  • float (número de punto flotante, también conocido como double)
  • string
  • array (compuesto)
  • object (compuesto)
  • resource (especial)
  • NULL (especial)

Manejo de variables

isset

Determina si una variable está definida y no es NULL.

$var = '';

// Esto evaluará a TRUE así que el texto se imprimirá.
if (isset($var)) {
    echo "Esta variable está definida, así que se imprimirá";
}

// En los siguientes ejemplos usaremos var_dump para imprimir
// el valor devuelto por isset().

$a = "prueba";
$b = "otraprueba";

var_dump(isset($a));      // TRUE
var_dump(isset($a, $b)); // TRUE

unset ($a);

var_dump(isset($a));     // FALSE
var_dump(isset($a, $b)); // FALSE

$foo = null;
var_dump(isset($foo));   // FALSE

Manejo de variables

empty

Determina si una variable está vacía.

$var = 0;

// Se evalúa a true ya que $var está vacia
if (empty($var)) {
    echo '$var es o bien 0, vacía, o no se encuentra definida en absoluto';
}

// Se evalúa como true ya que $var está definida
if (isset($var)) {
    echo '$var está definida a pesar que está vacía';
}

$str = '            ';
var_dump(empty($str)); // boolean false

//Recuerda siempre quitar los espacios con trim

$str = '        ';
$str = trim($str);
var_dump(empty($str)); // boolean true

Variables variables

A veces es conveniente tener nombres de variables variables. Dicho de otro modo, son nombres de variables que se pueden definir y usar dinámicamente. Una variable normal se establece con una sentencia como:

$a = 'hola';

Una variable variable toma el valor de una variable y lo trata como el nombre de una variable. En el ejemplo anterior, hola, se puede usar como el nombre de una variable utilizando dos signos de dólar. Es decir:

$$a = 'mundo';

echo "$a $hola";

Arrays escalares y asociativos

En PHP, los arrays pueden estar compuestos de elementos de diferente naturaleza y su primer índice o posición es la 0. Además, existen unos arrays especiales en PHP denominados asociativos en los que el índice es un valor de tipo string, de modo que cada posición está definida por el par (clave, valor), pudiendo acceder al contenido (valor) a través de la clave.

Ejemplo de array escalar:

$array[0] = "Mi Nombre";
$array[1] = "es Carlos y tengo";
$array[] = "25 años"; //Lo insertara en la posición 2.

for ($i = 0; $i <= count($array) – 1; $i++) { 
	echo $array[$i] ." ";
}

Ejemplo de array asociativo:

$array["nombre"] = "Mi Nombre";
$array["es"] = "es Carlos y tengo";
$array["tengo"] = "25 años"; 
	
echo $array["nombre"] ." ". $array["es"] ." ". $array["tengo"];

Manejo de cadenas

echo vs print

Aunque echo y print no son funciones sino construcciones del lenguaje (tales como if, while o list()), la principal diferencia es que print puede comportarse como una función, puesto que devuelve el valor 1, por lo que es posible que una instrucción print se encuentre participando en expresiones complejas, donde echo generaría un error. Ello nos lleva a que print es algo más lento que echo, puesto que pierde un tiempo en ocuparse de devolver el valor.

Manejo de cadenas

Concatenación

Existen dos operadores para datos tipo string. El primero es el operador de concatenación ('.'), el cual retorna el resultado de concatenar sus argumentos derecho e izquierdo. El segundo es el operador de asignación sobre concatenación ('.='), el cual añade el argumento del lado derecho al argumento en el lado izquierdo.

$a = "Hello ";
$b = $a . "World!"; // ahora $b contiene "Hello World!"

$a  = "Hello ";
$a .= "World!";     // ahora $a contiene "Hello World!"

Estructuras de Control

if, else, elseif...

$a = 1;
$b = 2;
$c = 3;

//if... else
if ($a > $b) {
  	echo "a es mayor que b";  
} else {
	echo "b es mayor que a";
}

//if... elseif
if ($a > $b and $a > $c) {
	echo "a es mayor que b y c";
} elseif ($b > $a and $b > $c) {
	echo "b es mayor que a y c";
} else {
	echo "c es mayor que a y b";
}

Estructuras de Control

if compacto (ternario)

$a = 5;
$b = 2;
$c = 3;

$mayor = ($a > $b) ? $a : $b;

echo "El número mayor es: ". ($mayor > $c) ? $mayor : $c;

Estructuras de Control

for vs foreach

echo "La suma de los 10 primeros números enteros es: ";

$suma = 0;

for ($i = 1; $i <= 10; $i++) {
	$suma += $i;
	
	echo $i . ($i == 10) ? "=" : "+";
}

echo $suma;
$frutas = array("Manzana", "Pera", "Naranja");

foreach ($frutas as $fruta) {
	echo "Fruta: $fruta <br />\n";
}

Estructuras de Control

while vs do... while

//while
$i = 1;

while ($i <= 10) {
	echo $i++; //post-incremento, primero imprime el valor de $i, luego incrementa 1.
}

//do... while
$i = 0;

do {
	echo $i;
} while ($i > 0); //Entra siempre la primera vez.

Estructuras de Control

switch

echo "Hoy es: ";

$dia = date("D");

switch ($dia) {
	case "Mon":
		echo "Lunes";
		break;
	case "Tue":
		echo "Martes";
		break;
	case "Wed":
		echo "Miércoles";
		break;
	case "Thu":
		echo "Jueves";
		break;
	case "Fri":
		echo "Viernes";
		break;
	case "Sat":
		echo "Sábado";
		break;
	default:
		echo "Domingo";
}

Operadores

Aritmétios

+   $a + $b   //Suma
-   $a - $b   //Resta
*   $a * $b   //Multiplicación
/   $a / $b   //División
%   $a % $b   //Resto de la división entera

Operadores

Lógicos

&&    $a && $b    //$a y $b son ambos true
and   $a and $b   //$a y $b son ambos true
||    $a || $b    //$a o $b son true
or    $a or $b    //$a o $b son true
!     !$a   	  //$a es false, niega el valor lógico de la variable
xor   $a xor $b   //$a es true o $b es true, pero no lo son los dos a la vez.

Operadores

De Asignación

=    $a = $b     //$a toma el valor de $b
+=    $a += $b    //Equivale a: $a = $a + $b
-=    $a -= $b    //Equivale a: $a = $a - $b
*=    $a *= $b    //Equivale a: $a = $a * $b
/=    $a /= $b    //Equivale a: $a = $a / $b
%=    $a %= $b    //Equivale a: $a = $a % $b
.=    $a .= $b    //Equivale a: $a = $a . $b

Operadores

De Asignación

=    $a = $b     //$a toma el valor de $b
+=    $a += $b    //Equivale a: $a = $a + $b
-=    $a -= $b    //Equivale a: $a = $a - $b
*=    $a *= $b    //Equivale a: $a = $a * $b
/=    $a /= $b    //Equivale a: $a = $a / $b
%=    $a %= $b    //Equivale a: $a = $a % $b
.=    $a .= $b    //Equivale a: $a = $a . $b

Operadores

Incremento y decremento

++    ++$a   //Preincremento: Incrementa $a en uno y después devuelve $a. 
	  $a++   //Postincremento: Devuelve $a y después incrementa en uno $a.

--    --$a   //Predecremento: Decrementa $a en uno y después devuelve $a.
      $a--   //Postdecremento: Devuelve $a y después decrementa en uno $a.

Operadores

Omisión de errores

@mail($email, $subject, $message);

Uso de formularios

Estructura de un formulario $_GET $_POST $_REQUEST Sanitización de variables

Uso de formularios

Envío de datos

<form id="agenda" method="post">
	<p>
		Nombre: <input name="nombre" type="text">
	</p>

	<p>
		Email: <input name="email" type="text">
	</p>

	<p>
		<input name="enviar" type="submit" value="Enviar datos">
	</p>
</form>

Uso de formularios

$_GET

$nombre = $_GET["nombre"];
$email = $_GET["email"];

echo "Nombre: $nombre <br>
Email: $email";

Uso de formularios

$_POST

$nombre = $_POST["nombre"];
$email = $_POST["email"];

echo "Nombre: $nombre <br>
Email: $email";

Uso de formularios

$_REQUEST

$nombre = $_REQUEST["nombre"];
$email = $_REQUEST["email"];

echo "Nombre: $nombre <br>
Email: $email";

Uso de formularios

Sanitización de variables

function sanatize($string) {
	return strip_tags(addslashes($string));
}

$nombre = sanatize($_GET["nombre"]);
$email = sanatize($_GET["email"]);

$nombre = sanatize($_POST["nombre"]);
$email = sanatize($_POST["email"]);

$nombre = sanatize($_REQUEST["nombre"]);
$email = sanatize($_REQUEST["email"]);

echo "Nombre: $nombre <br>
Email: $email";

Funciones

Parámetros obligatorios y opcionales Regresar valores Funciones anónimas

Funciones

Parámetros obligatorios y opcionales

//Parámetors obligatorios
function imprimir($texto) {
	echo $texto;
}

imprimir("Hola mundo"); //Si no se pasa ningún valor marcará un warning.

//Parámetros opcionales
function imprimir($texto = "Adiós mundo cruel") {
	echo $texto;
}

imprimir(); //Imprimirá "Adiós mundo cruel", y no marcará error.
imprimir("Ola ke ase, aprendiendo PHP o que ase."); //Imprimirá "Ola ke ase, aprendiendo PHP o que ase."

Funciones

Regresar valores

Una de las cualidades de una función es que puede regresar un valor.

function sumar($a, $b) {
	return $a + $b;
}

echo sumar(2, 2); //Imprimirá: 4.

Funciones

Funciones anónimas

$saludo = function($nombre) {
    echo "Hola $nombre <br>";
}; //OJO: Punto y coma al final de la llave, si no marca error.

$saludo("Carlos");
$saludo('Mundo');

Sesiones y Cookies

Crear y eliminar una sesión Crear y eliminar una cookie

Sesiones y Cookies

Crear y eliminar una sesión

//Inicializando las sesiones
session_start();

if (!isset($_SESSION["visitas"])) {
	$_SESSION["visitas"] = 1;
} else {
	$_SESSION["visitas"]++;
}

echo "Esta página ha sido visitada ". $_SESSION["visitas"] ." veces";

//Eliminar sessiones, 2 formas:
unset($_SESSION["visitas"]);
session_destroy();

Sesiones y Cookies

Crear y eliminar una cookie

//Creando una cookie
if (!isset($_COOKIE["visitas"])) {
	setcookie("visitas", 1, 3600); //Duración: 1 hora
} else {
	setcookie("visitas", $_COOKIE["visitas"] + 1, 3600); //Alterando la cookie.
}

echo "Esta página ha sido visitada ". $_COOKIE["visitas"] ." veces";

//Eliminar cookie:
setcookie("visitas"); //No se le específica valor ni tiempo de vida.

Manejo de archivos

include, include_once vs require y require_once Lectura y escritura de archivos file_get_contents vs file_put_contents $_FILES

Manejo de archivos

include, include_once vs require y require_once

//archivo: variables.php
$color = "verde";
$fruta = "manzana";

//archivo: prueba.php
echo "Una $fruta $color"; //Imprime: Una
include "variables.php"; //Si no existe muestra un Warning
#require "variables.php"; //Si no existe manda un Fatal Error, detiene la ejecución del script
#include_once "variables.php"; //Sólo incluye el archivo 1 vez, si no existe Warning.
#require_once "variables.php"; //Sólo incluye el archivo 1 vez, si no existe Fatal error.
echo "Una $fruta $color"; //Imprime: Una manzana verde

Manejo de archivos

Lectura y escritura de archivos

//Lectura de un archivo.
$handle = fopen("files/archivo.txt", "r");

if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        echo $buffer;
    }

    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }

    fclose($handle);
}

//Si se escribe dos veces sobre el puntero al archivo la información 
//será añadida al final del contenido del archivo:

$fp = fopen('data.txt', 'w');

fwrite($fp, '1');
fwrite($fp, '23');

fclose($fp);

//¡El contenido de 'data.txt' ahora es 123 y no 23!

Manejo de archivos

file_get_contents vs file_put_contents

//file_get_contents - Obtiene un archivo o una página Web específicada				
$codejobs = file_get_contents("http://www.codejobs.biz");
echo $codejobs;

$archivo = file_get_contents("miarchivo.txt");
echo $archivo;

//file_put_contents - Escribe una cadena a un fichero

// Abre el fichero para obtener el contenido existente
$contenido = file_get_contents("emails.txt");

// Añade un nuevo email al fichero
$contenido .= "carlos@milkzoft.com\n";

// Escribe el contenido al fichero
file_put_contents("emails.txt", $contenido);

Manejo de archivos

$_FILES

//formulario.php					
<form action="upload.php" method="post" enctype="multipart/form-data">
  	<input name="archivo" type="file">
  	<input name="subir" type="submit" value="Upload File">   
</form>

//upload.php, asegúrate de colocar permisos 777 a la carpeta "files".
if (isset($_POST["subir"])) {
    // Obtenemos los datos del archivo
    $size  	  = $_FILES["archivo"]["size"];
    $type 	  = $_FILES["archivo"]["type"];
    $filename = $_FILES["archivo"]["name"];
   
    if ($filename != "") {
        // Guardamos el archivo a la carpeta files
        $destino = "files/$filename";
        
        if (move_uploaded_file($_FILES["archivo"]["tmp_name"], $destino)) {
            echo "Archivo subido: $filename";
        } else {
            echo "Error al subir el archivo";
        }
    } else {
        echo "Error al subir archivo";
    }
}

Bases de Datos (MySQL)

Conexión a una base de datos Búsquedas y consultas CRUD (Create, Read, Update and Delete) Prevención de inyecciones SQL

Bases de Datos (MySQL)

Conexión a una base de datos



						

Bases de Datos (MySQL)

Búsquedas y consultas



						

Bases de Datos (MySQL)

CRUD (Create, Read, Update and Delete)



						

Bases de Datos (MySQL)

Prevención de inyecciones SQL



						

Programación Orientada a Objetos

Objetos e instancias Constructores vs destructores Atributos y métodos Ámbitos (public, private, protected y static) Clase abstracta vs Interfaz Herencia Clonación de objetos Sobreescritura de métodos Métodos estáticos

Programación Orientada a Objetos

Objetos e instancias



						

Programación Orientada a Objetos

Constructores vs destructores



						

Programación Orientada a Objetos

Atributos y métodos



						

Programación Orientada a Objetos

Ámbitos (public, private, protected y static)



						

Programación Orientada a Objetos

Clase abstracta vs Interfaz



						

Programación Orientada a Objetos

Herencia



						

Programación Orientada a Objetos

Clonación de objetos



						

Programación Orientada a Objetos

Sobreescritura de métodos



						

Programación Orientada a Objetos

Métodos estáticos



						

Patrones de diseño

MVC vs HMVC Singleton Factory

Patrones de diseño

MVC vs HCML



						

Patrones de diseño

Singleton



						

Patrones de diseño

Factory



						

Introducción a los CMS y Frameworks

Wordpress CodeIgniter ZanPHP

Mejores prácticas

Estándar PSR0 Estándar PSR1 Estándar PSR2 Refactorización de código

Mejores prácticas

Estándar PSR0

					

						

Mejores prácticas

Estándar PSR1



						

Mejores prácticas

Estándar PSR2



						

Mejores prácticas

Refactorización de código



						

Producción

FTP GIT Github Registrar un dominio (.com, .net, .org) ¡Lanzar nuestro proyecto!

¡GRACIAS!

Por Carlos Santana @czantany