Páginas

domingo, 13 de mayo de 2012

Manejo de errores y excepciones PHP

Buenas en esta entrada intentaré explicar un poco el manejo de errores y excepciones con PHP, comenzaremos definiendo un poco que es un error a nivel de programación.
Un error es un problema que pasa en cierta línea de programación a medida que nuestro código es interpretado, un ejemplo muy simple pero bastante recurrente, el no colocar el ";" a final de cada línea de instrucción.

 Una excepción es un problema o algo inesperado que ocurre al intentar interpretar nuestro código. Si vemos los conceptos en teoría son parecidos más no son lo mismo, es importante hacer la aclaración porque habemos quienes la primera vez que vemos el tema creemos que es lo mismo. Llevemos esto a un ejemplo simple

/**
*
* conexion con el servidor
*/
$dns = 'mysql:host=localhost;db=test';
$user = 'user';
$password = 'password';
// si vemos esta línea el interprete de php encuentra un error al no encontrar el final de línea ";"
$connect = new PDO($dns, $user, $password)

ahora si tenemos el mismo código completo pero no están bien los parámetros de la conexión con mysql esto nos lanzará una excepción

/**
*
* conexion con el servidor
*/
$dns = 'mysql:host=localhost;db=test';
$user = 'user';
$password = 'password';
// si vemos esta línea el interprete de php encuentra un error al no encontrar el final de línea ";"
$connect = new PDO($dns, $user, $password);

Ahora como manejarlas?? PHP desde la versión 4 pero mejorada en la versión 5 tiene un soporte para programación orientada a objetos, por lo que podemos explotar estos beneficios. Para manejar las excepciones php tiene varias palabras reservadas las cuales indicaremos a continuación.

 Lo primero que tenemos que conocer es la clase Exception esta nos brinda la posibilidad de manejar todas las excepciones que lance el lenguaje.

 Ahora hablaremos un poco de throw: como bien es traducido a nuestro idioma es lanza, lo usamos para indicarle al interprete que debe lanzar una excepción en caso de que algo no sea lo que necesitamos, un ejemplo simple

function test($a) {
    if(!$a) {
        throw new Exception('Error al comparar a');
    } else  {
       echo $a;
    }
}

En esté código lo que le decimos al interprete de php, es si es falso $a lanza una excepción porque necesitas que esté tenga un valor verdadero.


try/catch Estas dos palabras son importantes e interesantes al momento de trabajar con excepciones, como vemos en su traducción a nuestro lenguaje try es trata, intenta ejecutar el código que esta en este bloque, si existe algún problema o algo inesperado catch o captura la excepción, entonces si continuamos la implementación del código anterior que ya nos lanza una excepción entonces realizaríamos lo siguiente

try {
   test(0);
} catch(Exception $e) {
   $e->getMessage(); 
}

Entonces si pasamos 0 el interprete de php lo toma como falso y este automáticamente lanzara la excepción, como vemos el catch pide como parámetro un objeto del tipo Exception, y cuando captura esta excepción muestra el mensaje.

Hasta ahora todo ha sido fácil y sencillo verdad?? Ahora lo vamos a ver un poco más fácil vamos a trabajar como se debe a partir de PHP5 con objetos, para el manejar las excepciones con objetos no cambia mucho, lo que cambia es que podemos utilizar las ventajas como la herencia para extender de la clase Exception y crear nuestro propio objeto para manejar las excepciones.

Para el caso de los objetos trabajaremos con una sencilla clase

/**
*
* class manager of exception
*/
class TestException extends Exception {}

/**
*
* class for testing this article
*/
class Test 
{
    /**
    *
    * @param Int $number
    */
    public function testInteger($number)
    {   
        if(!is_numeric($number)) {
            throw new TestException('Debe de indicar un numero');
        }
        if(is_int($number)) {
            return true;
        } else {
            return false;
        }
    }
}

Entonces cuando nos toque utilizar este objeto deberíamos realizar lo siguiente

try {
    $test = new Test();
    $test->testInteger(1);
    $test->testInteger('hola');
} catch(TestException $e) {
    echo $e->__toString();
}

si ejecutamos el código nos dara como resultado algo como esto
exception 'TestException' with message 'Debe de indicar un numero' in /var/www/loqueras/Test.php:22 Stack trace: #0 /var/www/loqueras/Test.php(35): Test->testInteger('hola') #1 {main}

Con esto ya sabemos donde y que es lo que esta pasando en nuestro código, como ven no hay error de sintaxis, sino más bien de algo que esperaba la clase.

Tocando un poco otro tema en cuanto al manejo de errores hay un tema importantes al momento de trabajar los mensajes de errores, warning, hay muchos códigos o programadores que utilizan el símbolo "@" o operador de control de error para que el interprete de php no muestre en pantalla el error, esto simplemente es una mala práctica al momento de programar, porque?? porque simplemente ocultar un error no lo corrige, solo lo oculta, es como que te barra la casa y te esconda la tierra bajo la sombra y luego pregunten porque me enferme. Buenos por ahora es todo espero que les sirva este post y ayude a entender un poco mas el manejo de errores y excepciones saludos.

sábado, 3 de marzo de 2012

Presentación de mi mini Librería FileManager

Esta entrada es para presentar la primera versión de la librería que estoy creando para el manejo de archivos txt, csv, es 100% programación orientada a objetos, aunque todavía esta en beta, ya estoy trabajando en una segunda versión que agregara mas utilidad y manejo sobre estos archivos, por ahora estoy conforme con lo que hace, pueden probarla si lo desean y me indican si encuentran algún bugs.

 La librería esta bajo la licencia GPL por lo tanto se puede copiar, modificar y distribuir con todos los términos que esta licencia indica Todavía no le tengo una documentación por lo tanto mostrare como utilizarla aunque es muy intuitiva, en mi repositorio publico de github encontramos la libreria y la utilizamos de la siguiente manera:
  archivo.csv
 campo1;campo2;campo3
 valor11;valor12;valor13
valor21;valor22;valor23
valor31;valor32;valor33

 instanciamos la clase y le indicamos el archivo
    require_once 'filemanager/libs/FileManager.php';

    $file = new file('archivo.csv');
    $fileManager = new FileManager();
    $fileManager->setFile($file);

obtenemos el contenido del archivo en un arreglo
    $contenido = $fileManager->read();
    foreach($contenido as $linea => $contenido) {
        echo "$linea.- $contenido";
    }

podemos mostrarlo o realizar cualquier trabajo que deseemos con el. escribir nuevo contenido al archivo
    $nuevoContenido = "a;b;c\nd;e;f\n";
    $fileManager->changeMode('w');
    $fileManager->write($nuevoContenido);

este metodo borra el contenido anterior del archivo por lo que debemos de ser muy cuidadosos con el, para agregar una nueva linea al archivo necesitamos utilizar el metodo addNewLine
    $nuevoContenido = "a;b;c;";
    $fileManager->changeMode('a');
    $fileManager->addNewLine($nuevoContenido);

como su nombre lo indica agrega una nueva linea. Actualización del archivo
    //el contenido
    $nuevoContenido = "a;b;c;";
    //la linea a actualizar
    $line = 1;
    $fileManager->changeMode('w');
    $fileManager->update($line, $nuevoContenido);

de esa manera se actualiza esa línea sin cambiar nada más dentro del archivo el método save, este método es lo suficientemente inteligente como para escribir todo de nuevo o actualizar el archivo según sea el caso
    //el contenido
    $nuevoContenido = "a;b;c;";
    //la linea a actualizar
    $line = 1;
    $fileManager->changeMode('w');
    //hace lo mismo que write,
    $fileManager->save($nuevoContenido);
    //el metodo verifica que no este vacío, si lo esta hace lo mismo que write, sino lo esta hace el update
    $fileManager->save($nuevoContenido, 1);

El método delete(), este método borra un archivo, cabe destacar que para poder hacerlo el archivo tiene que tener los permisos, sino dará una excepción.
    
    $fileManager->delete();

Método changeMode, a menudo es necesario cambiar el modo para poder hacer los cambios en los archivos ya que por defecto cuando pasamos el archivo a la clase esta abierto como lectura 'r', este método nos permite cambiar el modo para poder agregar información al documento como lo hemos visto en cada uno de los métodos anteriores
    
    $fileManager->changeMode('w');

mas información sobre los modos de apertura de un archivo aca. espero que la librería les sea de utilidad, saludos cualquier comentario es bien aceptado

viernes, 24 de febrero de 2012

Rutas en PHP

Esta es una entrada un tanto informativa, que tenía algo pendiente y al ver algunos detalles en unos códigos en la web me decidí a compartir. Al hablar de las rutas en PHP podemos decir que tenemos dos maneras de implementarlas 1.- Rutas Absolutas: son aquellas en la que colocamos toda la url del archivo que queremos incluir, mencionar, etc, un ejemplo: archivo http://tusitio.com/archivos/incluir.php esta es la ruta de un archivo alojado en tusitio.com en la carpeta archivos el archivo incluir.php
$hola = "Hola Mundo!!";
index.php
require_once('http://tusitio.com/archivos/incluir.php');
echo $hola;
el resultado sería hola mundo en nuestro navegador, ya que incluimos el archivo por medio de una ruta absoluta, fácil verdad?? 2.- Rutas Relativas: Las rutas relativas son un poco mas complejas de explicar, pero sin embargo una vez que entendemos es sencillo saber como llegar desde donde estamos hasta el archivo que queremos llegar, veamos con un ejemplo para ser más específico estructura del sitio htdocs/ ...images/ ......image.png ......logo.jpg ......mygif.gif ...css/ ......style.css ...js ......myJs.js ...index.php ...procesos/ ......miProceso.php ...class/ ......myClass.php supongamos que en el index queremos incluir a miProceso.php, tendriamos que hacer lo siguiente
require_once('procesos/miProceso.php');
lo que indicamos con esta ruta es que desde index.php vaya a la carpeta proceso e incluya el archivo miProceso.php fácil verdad?? Pero que pasa cuando el archivo no esta en una carpeta del mismo nivel, sino que tenemos que salir de nuestra carpeta para llegar al sitio?? debemos utilizar '../' para subir un nivel fuera de nuestra carpeta, es decir, si quicieramos incluir a myClass.php dentro de miProceso.php tendríamos que realizar lo siguiente
require_once('../class/myClass.php');
que hicimos?? al hacer "../" subimos un nivel, es decir subimos desde la carpeta procesos a la carpeta htdocs, una vez en la carpeta htdocs entramos a la carpeta class ("class/") e incluimos el archivo myClass.php dentro de el archivo miProceso.php podemos dentro de las rutas relativas subir niveles e ingresar en carpetas tantas veces como sea necesarío, ver algo como esto ../../carpeta1/carpeta2/archivo.php es una ruta correcta en esta subimos dos niveles y entramos en la carpeta2 que a su vez esta en la carpeta1 espero que sea de ayuda esta entrada, saludos

domingo, 22 de enero de 2012

Clase para gestión de Usuario

En una Discusión que se formo en un aporte que hizo un compañero de forosdelweb, donde di algunas sugerencias al usuario que lo inicio, quede de hacer una pequeña clase para también aportar al tema en cuestión, y hasta ahora la clase es la siguiente

error_reporting(E_ALL);
/**
 * 
 * clase para gestionar Usuarios
 * @author Carlos Belisario 
 * @version 1.0
 * 
 */
class Usuarios
{
    /**
     * 
     * @var String $usuario
     */
    private $usuario;
    
    /**
     * 
     * @var String $password
     */
    private $password;
    
    /**
     * 
     * @var String $rol
     */
    private $rol;
    
    /**
     * 
     * @var String $estatus
     */
    private $estatus;
    
    /**
     * 
     * @var String $securitySalt
     */
    private $securitySalt;
    
    /**
     *
     * @var PDO 
     */
    private $db;
    
    /**
     *
     * @var String $error
     */
    private $error;


    /**
     *
     * @param PDO $db 
     */
    
    public function __construct(PDO $db) 
    {
        $this->db = $db;
    }

        /**
     * 
     * Getter and Setter
     */
    public function getUsuario() 
    {
        return $this->usuario;
    }
    
    public function setUsuario($usuario)
    {
        $this->usuario = $usuario;
    }
    
    public function getPassword()
    {
        return $this->password;
    }
    
    public function setPassword($password, $salt = true)
    {
        if($salt)
            $this->password = md5($this->getUsuario().$password.$this->getSecuritySalt());
        else
            $this->password = md5($this->getUsuario().$password);
    }
    
    public function getSecuritySalt()
    {
        return $this->securitySalt;
    }
    
    public function setSecuritySalt($securitySalt = 'heyntonwgrnkmoamju33mdowm')
    {
        $this->securitySalt = $securitySalt;
    }
    
    public function getRol()
    {
        return $this->rol;
    }
    
    public function setRol($rol)
    {
        $this->rol = $rol;
    }
    
    public function getEstatus()
    {
        return $this->estatus;
    }
    
    public function setEstatus($estatus)
    {
        $this->estatus = $estatus;        
    }
    
    public function getError()
    {
        return $this->error;
    }

    public function setError($k, $error)
    {
        $this->error[$k] = $error;
    }
    /**
     * 
     * @method login
     * metodo para autnetificar al usuario
     * 
     */
    public function login()
    {
        // aca verificamos que el usuario haya escrito en un formato que comience con letras y pueda estar seguido de un punto, guion bajo o guion 
        if(preg_match("/(^[a-z]{1,20})(?!\s)([\w-\.]{0,20}$)/i",  $this->getUsuario())){
            $sql = "SELECT * FROM usuarios WHERE usuario = :usuario AND password = :password";
            try {
                // hacemos la consulta
                $query = $this->db->prepare($sql);            
                $query->bindParam(':usuario', $this->getUsuario());
                $query->bindParam(':password', $this->getPassword());
                $query->execute();
                $row = $query->fetchObject();
                //verificamos que el usuario exista en la base de datos y la password sea correcta
                if(!empty($row)) {                                                                                  
                    $this->setRol($row->rol);
                    /*podemos pasar el estatus para que se haga la verificacion
                    * e ingrese a una pagina para usuarios deshabilitados, 
                    * para darle motivos e incluso donde comunicarse, 
                    *                            
                    */                        
                    $this->setEstatus($row->estatus);
                        
                    /* o podemos incluirlo en los errores, de manera que no haga login
                    if($row->estatus == "habilitado") {
                        $this->setRol($row->rol);                                                                 
                    } else {
                        $this->setError ('userEstatus', 'El Usuario no esta habilitado');
                    }*/                          
                    
                } else {
                    $this->setError('errorLogin', 'El Usuario o la Contraseña no es Correcta');
                }    
            
             } catch( PDOException $e) {
                 $e->getMessage();
             }                     
        } else {
            $this->setError('erroFormato', 'Formato de usuario no permitido');
        }   
    }
}

/**
* como usar
*/
try {
//establecemos la conexion con PDO
    $db = new PDO('mysql:host=localhost; dbname=prueba', 'root', '123');   
} catch(PDOException $e) {
   echo $e->getMessage();
}
//instanciamos la clase y probamos el login
$class = new Usuarios($db);
//los parámetros estan siendo pasado un login por defecto se puede obtener desde un formulario con $_POST O $_GET
$class->setUsuario('carlos');
$class->setPassword('123456');
//indicamos que realice el login
$class->login();
//sino existe algn error 
if(count($class->getError()) == 0) {
    //realizamos los procesos con las variables de session o incluso si se desea se puede crear un componente de session y le pasamos nuestro objeto usuario con el login correcto
} else {
// gestionamos los mensajes de errores para los usuarios
    echo "
";
    print_r($class->getError());
    echo "
"; }
hasta ahora llevo realizado esto, sin la gestión de lo que es el CRUD de la gestión de usuarios, sin embargo cuando vaya teniendo tiempo lo iré actualizando, el proyecto lo pueden descargar desde https://github.com/carlosbelisario/juegos_con_clases/ espero que sea de utilidad

jueves, 9 de junio de 2011

Comenzando con PHP - Operadores

En esta entrada, continuando con la serie de artículos introductorios al PHP, estaremos hablando de los operadores en PHP  y lo que podemos ir logrando con ellos, también hablaremos un poco de la concatenación de string, variables profundizando un poco más en el lenguaje en si, aunque todavía no hemos hecho ninguna aplicación :-).

Los operadores no son mas que los carácteres que nos permiten realizar ciertas operaciones, en PHP podemos realizar desde operaciones básicas(suma, resta, etc) hasta algunas un poco más complejas, para no extendernos tanto en el tema comencemos a conocer los operadores básicos en PHP.


Operadores Aritméticos

Como su mismo nombre lo indica son los operadores que nos permiten realizar operaciones aritméticas en nuestros programas, estos son sencillos, ya que son los que diariamente nos encontramos, entre ellos tenemos:

  • + (Suma): El signo de mas(+) es el operador que utilizamos para realizar la suma en nuestras operaciones, un ejemplo:
    $resultado = 1 + 1;
    echo $resultado;
    
    Sencillo, nada que no hallamos conocido hasta ahora :-).
  • - (resta): El signo - como es de imaginar lo utilizamos para restar, también nos brinda la sencilles de operaciones que ya hemos realizado.
    $resultado = 3 - 1;
    echo $resultado;
    
  • * (multiplicación): Para los que no han tenido ninguna relación con un lenguaje de programación normalmente el simbolo del asterisco (*) es el que se utiliza para hacer referencia a la multiplicación, PHP no es la excepción.
    $resultado = 3 * 5;
    echo $resultado;
    
  • / (división): Si como lo podemos ver tenemos el slash(/) como signo para identificar la división, ejemplo
    $resultado = 4 / 2;
    echo $resultado;
    
  • % (modulo): En este momento es cuando los que estamos comenzando empezamos a conocer operadores, para los que no lo conocen el módulo es el residuo que queda de una división, este es muy utilizado al momento de saber si un numero es par o impar, pongamos un ejemplo:
    $modulo = 10 % 2;
    if($modulo == 0){
       echo "el numero es par y su residuo es $modulo";
    }
    $modulo1 = 9 % 2;
    if($modulo1 == 0){
       echo "el numero es par";
    }
    else{
        echo "el numero es impar y su residuo es $modulo1";
    }
    echo $resultado;
    
    Que es lo que hace el modulo?? divide el numero de la izquierda entre el numero después del símbolo del porcentaje, y retorna como resultado el residuo que quede de esta división, en el primer caso retornaria "el numero es par y su residuo es 0", en el segundo caso  "el numero es impar y su residuo es 1", para probarlo hagan una división a mano y vean el residuo y entenderan un poco mas (a practicar matemáticas jaja XD). 
Operador de Concatenación de String.

Para concatenar dos string e incluso una variable utilizamos el punto (.)   seguido del string que deseemos concatenar un ejemplo.

$variable = "hola";
echo 'yo deseo que se imprima lo que dice la variable y esto es ' . $variable;

El resultado seria "yo deseo que se imprima lo que dice la variable y esto es hola", esta es una simple concatenación para irnos familiarizando, esto lo utilizaremos bastante eso lo aseguro :-).

Operador de Asignación

El operador de asignación en PHP es el signo igual "=", lo utilizamos para asignar valores a las variables, aunque se ve bastante sencillo PHP nos permite varias formas de asignar valores a nuestras variables, veamos algunas de ellas.
  • = (Igual): Asigna el valor a la variable, ejemplo:
    $variable = "hola";
    

  • .= ( punto seguido del signo igual): Asigna un valor a la variable, si la variable ya contiene un valor, el resultado seria el valor actual de la variable concatenado con el valor que deseamos agregar a esta, un ejemplo:
    $variable = "hola ";
    $variable .= "Como estas";
    echo $variable;
    
    El resultado seria "hola Como estas", fácil verdad??
  • += (símbolo de mas seguido del igual): Al igual que con el punto lo que hacemos es sumar al valor que ya contiene la variable (lo que es igual a un acumulador), si hacemos algo como esto
    $i = 0;
    $i += 5;
    $i += 10;
    echo $i;
    
    Si como ya deben de saber el resultado seria 15.
Para no extendernos con este tipo de asignación podemos realizar la misma forma de asignar con cada uno de los operadores aritméticos ya indicados y estos harán la respectiva operación con el valor y luego la asignación.


Operadores de Comparación


Los operadores de comparación como bien su nombre lo indica se utilizan para hacer comparaciones, estos retornan un valor booleano true / false, mayormente lo utilizamos en los condicionales (ya hablaremos de estos), veamos cuales operadores podemos utilizar:
  • == Doble Igual (Igual que): Colocando el == Indicamos al interprete de PHP que estamos haciendo una comparación de que el valor de la izquierda es igual al valor de la derecha, ejemplo.
    var_dump(2 == 2);
    //retorna true
    var_dump(2 == 1);
    //retorna false
    
    Si copiamos este código y lo vemos en el navegador obtendriamos algo como esto
    bool(true) bool(false)
    Si es el retorno de nuestras comparaciones.
  • ! (cierre exclamación): Con este operador indicamos al navedador que debe negar una operacion si hacemos algo como esto
    var_dump(! 2 == 2);
    
    Obtendremos bool(false) ya que estamos negando el valor que nos da ese resultado.
  • != cierre exclamación igual (diferente): Si como imaginan estamos negando el igual, así que este operador lo utilizamos para indicar que un valor sea diferente, si tomamos el ejemplo inicial
    var_dump(2 != 2);
    //retorna false
    var_dump(2 != 1);
    //retorna true
    Ahora obtendriamos el resultado inverso al que colocábamos en la comparación inicial.
  • <> (diferente): Si es equivalente al operador anterior por lo que podemos utilizar el que deseemos.
  • <, <=, >, >= estos signos creo que todos en algún momento los hemos visto, pondré un ejemplo del uso de cada uno.
    var_dump(2 < 5);
    //retorna true
    var_dump(5 < 2);
    //retorna false
    var_dump(2 > 5);
    //retorna false
    var_dump(5 > 2);
    //retorna true
    var_dump(5 <= 2);
    //retorna false
    var_dump(2 <= 5);
    //retorna true
    var_dump(2 <= 2);
    //retorna true
    var_dump(5 >= 2);
    //retorna true
    var_dump(2 >= 5);
    //retorna false
    var_dump(2 >= 2);
    //retorna true
    
    Fácil verdad??.
  • === (identico): este operador es muy similar al igual cuando estamos comparando, la gran diferencia es que este evalúa que sean del mismo tipo y el mismo caracter, veamos un ejemplo básico
    var_dump("1" == 1);
    //retorna true
    var_dump("1" === 1);
    //retorna false
    
    pero porque?? si es el mismo numero??
    Como se dijo anteriormente las cadenas de carácteres siempre estan entre comillas (así sean números) y los caracteres numéricos no, entonces al preguntar si es igual evalúa que es el mismo caracter, pero si evaluamos si son idénticos al no ser del mismo tipo retorna false.
  • !== (no identico): al igual que en el anterior este evalúa el tipo de dato que estamos evaluando, en sí este evalúa si no son iguales y que no sean del mismo tipo, ejemplo:
    var_dump("1" !== 1);
    //retorna true
    var_dump(1 !== 1);
    //retorna false
    como podemos observar es todo lo contrario al anterior.
Operadores de Incremento:

En PHP podemos incrementar el numero de una variable muy fácilmente, utilizando este tipo de operador, hay cuatro de este tipo y los presentamos a continuación
  • Pre-incremento ++$i: Cuando hacemos el pre-incremento primero hacemos el incremento en uno a la variable y luego la retornamos ejemplo:
    $i = 0;
    echo ++$i;
    echo " 
    
    " . $i;
    
    esto me retornara
    1
    1

  • Post-Incremento $i++: Este operador hace lo inverso al anterior, retorna el valor y luego incrementa en uno a la variable veamos un ejemplo:
    $i = 0;
    echo $i++;
    echo " 
    
    " . $i;
    
    0
    1
    En lo personal mayormente cuando trabajajo con bucles utilizo este operador, aunque cada uno tiene el caso en el cual puede ser usado.
  • Pre-decremento --$i: Cuando hacemos el pre-incremento primero hacemos un decremento en uno a la variable y luego la retornamos ejemplo:
    $i = 10;
    echo --$i;
    echo " 
    
    " . $i;
    
    esto me retornara
    9
    9
  • Post-Incremento $i--: Igualmente este operador hace lo inverso al descrito anteriormente, retorna el valor y luego decrementa en uno a la variable veamos un ejemplo:
    $i = 10;
    echo $i--;
    echo " 
    
    " . $i;
    
    10
    9
Estos son algunos de los operadores en PHP, los más básicos con los que podemos empezar a hacer nuestros programas, más adelante iremos dando y viendo la utilidad que tienen estos, un saludo y hasta una próxima entrada.

martes, 7 de junio de 2011

Comenzando con PHP - Variables y Constantes

En el artículo anterior hicimos nuestro primer código PHP, este fue el popular hola mundo, en el día de hoy vamos a profundizar un poco más en el lenguaje, tocaremos el tema de "Las Variables y las Constantes en PHP".

Lo primero que hay que tener claro es:

¿Que es una variable?

Una variable no es mas que una posición en memoria que guardara un dato específico dentro de nuestro código, en PHP las variables son declaradas con el signo dollar "$" seguido de una palabra que haga referencia al valor que deseamos que esta contenga, un ejemplo de esto seria.
$nombre = "Carlos";
$apellido = "Belisario";

Fácil no??

Como vemos en PHP no hace falta la declaración del tipo de variable que se debe hacer normalmente en lenguajes como JAVA o Lenguaje C, el interprete de PHP entiende el tipo de dato al que pertenece la variable por medio del valor que este contiene.

Tipos de Datos que puede contener una variable

  • String o Cadenas de Carácteres:  Como su nombre lo indica son variables cuyo valor contiene una cadena de carácteres, para definir las cadenas como se dijo en el artículo anterior deben de estar entre comillas Dobles " " o comillas simples ' ', ejemplo:

    $string = "Esto es una cadena o string";
    
  • Números Enteros: Son variables que como su nombre lo indican contienen un número entero (sin decimal) dentro de ellas, para declarar estas variables solo hace falta asignar el número a la variable sin comillas, ejemplo
    $entero = 10;
    
  • Numeros Reales o Punto flotante: Son variables que contienen un numero real o con decimal dentro de ellos, al igual que los enteros se declaran asignando el valor numérico a la variable sin necesidad de que este entre comillas, el separador entre la parte entera y la parte decimal es el punto "."
    $real = 15.5;
    
  • Bool: Los variables con datos de tipo bool almacenan los valores de verdadero (true) o falso (false), son mayormente utilizadas para hacer condicionales (tema del que hablaremos en una próxima entrada).
  • Array o Arreglos: En PHP como en algunos otros lenguajes tenemos este tipo de variable, útil al momento de guardar múltiples resultados de un solo tipo, este tipo de variable crea un vector  con los datos almacenados, los cuales pueden ser de diferentes tipos sin que esto sea considerado como un error, para crear un arreglo podemos hacerlo de diferentes formas veamos los casos:
    caso 1:
    $arreglo = array("dato del primer indice","dato del segundo indice",15);
    
    En este caso asignamos al arreglo los valores, indicando la palabra array seguido de los valores dentro de paréntesis, para acceder a un valor de un array debemos hacerlo por medio de los índices del mismo, cuando se crean de esta manera los índices son numéricos y comienzan desde el indice 0 (cero), hasta la cantidad de elementos que tenga el array, en este ejemplo seria
    0 => "Dato del primer indice",
    1 => "Dato del segundo indice",
    2 => 15
    La forma de acceder a un valor de un array es por medio de su índice, esto lo hacemos indicando la variable seguida de el índice que deseamos mostrar, entonces si deseamos mostrar el valor del segundo índice tendríamos que hacer algo como esto
    $arreglo = array("dato del primer indice","dato del segundo indice",15);
    echo $arreglo[1]; 
    
    lo que daría como resultado una salida en el navegador diciendo "dato del segundo indice"
    Fácil verdad

    Caso 2:
    Asignación dinámica del array
    $arreglo[] = "Datos del primer índice";
    $arreglo[] = "Datos del segundo índice";
    $arreglo[] = 15;
    
    Como vemos aca asignamos los datos de una manera dinámica, sin necesidad de indicar la palabra array, solo debemos abrir y cerrar corchete (sin índice en el medio) y este automáticamente tomara el indice que deseemos.
    Nota: Si deseamos podemos indicar el índice que queremos que tenga el valor en el array, aunque cuando se están creando de manera dinámica esto no es necesario.

    Caso 3:
    Arreglos asociativos:
    $arreglo['nombre'] = "Carlos";
    $arreglo['apellido'] = "Belisario";
    $arreglo['edad'] = 24;
    
    Los arreglos asociativos son una de las mas maravillosas formas de crear un arreglo, ya que mediante este podemos indicar el índice con el nombre asociado al valor que estamos almacenando, en el caso que acabamos de mostrar, se veria de esta manera

    'nombre' => "Carlos",
    'apellido' => "Belisario",
    'edad' => 23

    Pero como accedemos a sus valores?? Igualmente con el índice, la única diferencia es que este sera un valor asociativo (string), si quiero saber el nombre como lo haríamos??
    echo $arreglo['nombre']
    
    Los arreglos son una de las partes fundamentales del lenguaje ya que con este tipo de datos es que mayormente se obtienen los resultados de consultas a las base de datos (ya llegaremos alla :-))
  • Objetos: Los objetos son un tipo de dato más complejo, para los que están comenzando en el mundo de la programación decirle que es un objeto y hablarles de métodos, atributos sería correrlos (un poco de humor :-)), pero para los que gusten en un artículo anterior se toco ese tema.
Ahí tenemos alguno de los tipos de datos que podemos tener en una variable, una vez que entendemos el funcionamiento de las variables, ahora veamos lo que son las constantes.

Una constante como su nombre lo indica es un valor que siempre sera el mismo dentro de un sistema, en PHP las definimos por medio de la funcion define(), son un poco menos utilizadas que las variables, pero si tienen su funcionalidad :-), veamos la definición de estas.


define('constante',"Valor de la Constante");
echo constante;
Como podemos ver las constantes se definen fácilmente, tenemos que tener claro que una constante solo es definida una vez, su valor luego no puede ser modificado.

Fácil o no??


Hay que destacar que hay que cosas que tenemos que tener en cuenta al momento de declarar una constante, colocaremos algunas a continuación
  • Las Constantes solo pueden ser definidas una vez, si en algún momento necesitáramos variar su valor entonces ya no tendría razón crear una constante sino crear una variable, hacer algo como esto
    define('constante',"Valor de la Constante");
    define('constante',"Otro valor");
    echo constante;
    
    Sería un esfuerzo perdido para no decir error ya que el interprete de PHP no mostraría ninguno, pero el resultado siempre sera "Valor de la Constante" porque son constantes :-).
  • Las constantes solo contienen valores escalares, que quiere decir esto?? que no contendrán array ni objetos dentro de ellas.
Una vez tenemos un poco más claro lo que son las variables y constantes hagamos un pequeño programita, sencillo pero donde implementemos lo hablado hoy.
calculo del área de un circulo
Indique el Radio:


Como vemos es un pequeño programa donde calculamos el área de un circulo, fácil verdad.
Un poco fuera del tema principal como se puede notar PHP no trabaja solo ya que es un lenguaje de servidor, la parte visual que ve el cliente la hacemos con el HTML, en el programa que acabamos de hacer embebimos el PHP dentro de las etiquetas HTML.

En conclusión hablamos de lo que son las variables y constantes en PHP, espero que se entienda lo que se quiso transmitir en este tercer artículo para los que se inician con el PHP

lunes, 6 de junio de 2011

Comenzando con PHP - MI Primer Código

En esta entrada comenzaremos a escribir código PHP, para los que no lo conocen PHP es un lenguaje de tipo Scripter(Interpretado) que se ejecuta del lado del servidor, desarrollado para realizar aplicaciones web dinámicas, combinándolo con el lenguaje de etiquetas HTML y un servidor de base de datos como MySQL que es del que estaremos hablando a medida que vayamos creando artículos relacionados(un poco de teoría nunca puede faltar :-)).

Como podemos escribir código PHP??

Para empezar a escribir código PHP hay una serie de programas que hacen falta, de los cuales hablamos en el artículo anterior, una vez instalados todos estos artículos solo nos queda comenzar a escribir nuestro código.

Para que nuestro navegador interprete el código que vayamos escribiendo es necesario encerrar entes entre la etiqueta de apertura y cierre de PHP, las cuales presentamos a continuación:

  • <?php Etiqueta natural del Lenguaje: Es la etiqueta de apertura (opent_tags) del lenguaje, es la más recomendada de todas las formas que existen para indicar que utilizaremos código PHP.
  • <?  Etiqueta corta: Con esta etiqueta igual que la anterior indicamos a nuestro navegador que debe intrepertar el código como código PHP, esta etiqueta esta desaconsejada debido a que hay muchos web-hosting que traen deshabilitado el short_open_tags lo cual puede traer problemas al momento de implementar nuestro archivo un poco mas de información sobre este tema aca, además de que esta forma trae problemas con la apertura del documento XML ejemplo <?xml version="1.0" encoding="UTF8">

  • <?= "string" ?> Con esta etiqueta indicamos al navegador que imprima lo que se encuentra después del signo igual lo que nos mostraría en el navegador "string", como es parte del short_open_tag esta desaconsejado totalmente.
  • ?> etiqueta de cierre de PHP, si tal y como lo imaginas con esta etiqueta cerramos el código PHP que hallamos generado.
Como podemos  ver existen varias maneras para que nuestro navegador interprete que el código es de PHP, como se indico la manera más recomendable y la que utilizaremos sera <?php  ?>.

Una vez establecido el como indicamos que estamos trabajando con PHP, llega el momento mas esperado, el momento de poner manos a la obra.

Lo primero que vamos a hacer es crear un sitio que hará referencia a nuestro código  PHP que generemos, esto lo haremos creando una carpeta en la carpeta /VAR/WWW/ si estamos en linux y seguimos el tutorial  anterior o en la carpeta HTDOCS si estamos en windows e instalamos el XAMPP para windows como se indico en el artículo anterior. Entonces en la carpeta que sea su caso creemos una caperta llamada comenzando, dentro de esta carpeta van a ir todos los archivos HTML,PHP que vayamos generando, entonces dentro de nuestra carpeta comenzando creemos un archivo llamado index.php, este archivo contendrá nuestro primer programa, este sera el clásico Hello World o Hola mundo, y  escribiremos el siguiente código
index.php

Si en nuestro navegador colocamos

http:/localhost/comenzando

obtendremos en el la palabra Hola Mundo!.

Nota: En este caso no se indico el archivo .php porque todo archivo index es considerado el archivo inicial a ejecutar, si hubieramos llamado al archivo comenzando.php tendríamos que haber indicado la dirección al navegador de esta manera

http:/localhost/comenzando/comenzando.php

Fácil no?? 

Pero familiaricémonos con la sintaxis de PHP, la primera línea como vemos tenemos la etiqueta de apertura <?php, en la segunda linea tenemos la funcion echo, esta función lo que haces es enviar una salida al navegador, en este caso la palabra Hola Mundo, como es una cadena de carácteres o string esta cadena va entre comillas, bien sean simples ' ', o dobles " " y el final de la línea tenemos el ;, que indica que finalizo la línea de instrucción de nuestro código de PHP, fácil verdad??

Como vemos la sintaxis de PHP es bastante sencilla, pero claro no vamos a utilizar PHP solo para hacer un programa con el Hola Mundo, más adelante iremos adentrándonos un poco más en este maravilloso lenguaje, un saludo y hasta la próxima entrada.