Instrucciones PHP

Instrucciones PHP

Publicado Por | 29 mayo , 2013 | Blog Adrenalina | No Comments

Hoy en día cada vez es más común el uso de PHP en proyectos web y cada día crece el número de personas que aprenden a programar en este lenguaje, ya sea por elección propia, o por el uso de plataformas de creación de blogs y webs como wordpress, drupal, magento, etc.

Tanto para los que empiezan con PHP, como para los que vienen de otros lenguajes o versiones anteriores, muchas veces hay instrucciones o procedimientos que se desconocen y que pueden ayudar en muchas situaciones. Este post pretende dar una muestra de algunas de estas instrucciones PHP.

  • La instrucción use

    Desde la versión 5.3.0 de PHP, este incorpora las llamadas funciones anónimas. Simplificando, podríamos decir que son funciones que no están relacionadas con ningún nombre (de ahí su nombre). Estas han sido incorporadas incluso a funciones internas de php, como la función array_map. A partir de la versión 5.3.0, no solo se le puede pasar el nombre de una función que mapee el array, sinó que se puede usar una función anónima. Esta, como cualquier función, tiene un ámbito de variables local. Por tanto, las variables que no sean globales o se pasen como parámetro no se podrán usar dentro de la función.

    <?php
    $arr = array('uno', 'dos');
    $prefix = 'número ';
    $prefix_arr = array_map(function($val) {
    return $prefix . $val;
    }, $arr);
    var_dump($prefix_arr);
    ?>

    Este código nos devolverá un error Undefined variable: prefix. En los casos como el del ejemplo, donde no podemos escoger los parámetros que recibe la función, la instrucción use nos servirá para poder usar variables en el ámbito local de la función, incluso por referencia:

    <?php
    $arr = array('uno', 'dos');
    $prefix = 'número ';
    $prefix_arr = array_map(function($val) use ($prefix) {
    return $prefix . $val;
    }, $arr);
    print_r($prefix_arr);
    ?>

    Que nos devolverá:

    Array
    (
    [0] => número uno
    [1] => número dos
    )
  • Abreviar Condicionales

    Como en muchos lenguajes de programación, en PHP existen diferentes maneras de escribir algo tan sencillo como un condicional if else.

    <?php
    if (!empty($cond)) 
    {
    echo 'not empty';
    }
    else 
    {
    echo 'empty';
    }
    ?>

    es equivalente a:

    <?php
    echo !empty($cond) ? 'not empty' : 'empty';
    ?>

    Además, para realizar asignaciones condicionales, también podemos jugar con los operadores AND y OR (o && y ||), sabiendo que php no evalúa toda una condición entera si las partes procesadas hasta el momento dan un resultado seguro (en true OR $c, y en false AND $c, la variable $c no se procesa)

    <?php
    if (!empty($cond)) 
    {
    $a = 'not empty';
    }
    else 
    {
    $a = 'empty';
    }
    ?>

    equivale a:

    <?php
    !empty($cond) 
    and $a = 'not empty'
    or $a = 'empty';
    ?>
  • Mostrar el contenido de un array por partes

    En ocasiones, normalmente al generar contenido html en una vista dinámicamente a partir de datos obtenidos de base de datos, por ejemplo, nos interesa mostrar el contenido de un array por partes para separarlo en diferentes filas. La función array_chunk nos puede ayudar en estos casos:

    <?php
    $datos = array('uno', 'dos', 'tres', 'cuatro', 'cinco');
    $filas = array_chunk($datos, 3);
    echo '<table>';
    foreach ($filas as $fila) {
    echo '<tr>';
    foreach ($fila as $columna) {
    echo '<td>' . $columna . '</td>';
    }
    echo '</tr>';
    }
    echo '</table>';
    ?>

    Nos generará:

    <table>
    <tr>
    <td>uno</td>
    <td>dos</td>
    <td>tres</td>
    </tr>
    <tr>
    <td>cuatro</td>
    <td>cinco</td>
    </tr>
    </table>
  • Capturar excepciones y errores

    Para un mejor control del flujo alternativo en nuestros programas es muy recomendable hacer uso de excepciones. Aun tratando de capturar siempre las excepciones, puede haber algunas veces en las que estas no estén recogidas por un bloque catch, lo que conducirá a que php muestre el error, o directamente un 500. Existen dos funciones para poder capturar a nivel global qué hacer cuando salta una excepción no capturada, o un error. Esto nos permitirá gestionar estos errores, ya sea guardándolos en un log antes de terminar la ejecución de la página, o mostrando información relevante al usuario, cancelar transacciones de base de datos, o incluso redirigir a una página de error.

    <?php
    set_exception_handler(function($exception) {
    echo $exception->getMessage();
    });
    set_error_handler(function($errno, $errstr, $errfile = null, $errline = null) {
    echo 'Error ocurred: [' . $errno . '] ' . $errstr . '(' . $errfile . ' - ' . $errline . ')');
    });
    ?>
  • Parsear un archivo de configuración

    Existen diferentes formatos estándares para los archivos de configuración. Podemos tener valores de configuración en un array con claves en un archivo php, un archivo xml de configuración, etc. Otra forma es crear un archivo .ini con el mismo formato que usa php.ini. Para recoger los valores, podemos usar la función parse_ini_file. Esta nos devolverá un array con todas las propiedades guardadas en el fichero en formato clave => valor. Usando el segundo parámetro a true, incluso podremos agrupar diferentes secciones

    ; ejemplo de archivo .ini
    ; los comentarios usando ';' no se inluirán en el array devuelto
    [primera_seccion]
    ruta = "/usr/local"
    proyecto = "php"
    [segunda_seccion]
    version = 2
    <?php
    $ini_props = parse_ini_file('archivo.ini', true);
    print_r($ini_props);
    ?>

    que mostrará:

    Array
    (
    [primera_seccion] => Array
    (
    [ruta] => /usr/local
    [proyecto] => php
    )
    [segunda_seccion] => Array
    (
    [version] => 2
    )
    )
  • Autoload de clases

    Algo muy común en los frameworks de desarrollo en php es la autocarga de clases, que permite incluir automáticamente los ficheros que contienen las clases en el momento de usarlas. Esto nos beneficia porqué no hará falta tener que incluir un listado de require o include con todos nuestros ficheros. Además aseguramos que solamente se incluirán en la carga de la página los ficheros que se usen. Si no estamos usando ningún framework, o el nuestro no permite esta funcionalidad, la podemos desarrollar nosotros usando la función de php spl_autoload_register. Por ejemplo, el código a continuación cargará automáticamente los ficheros de las clases que se llamen igual que la clase con .class.php, accesibles desde el include_path:

    spl_autoload_register(function ($class) {
    require_once $class . '.class.php';
    })

    La función spl_autoload_register añade a la cola de autocarga la función indicada. Podemos tener más de una función en la cola para verificar diferentes criterios, que se irán ejecutando uno por uno hasta que se encuentre el fichero, o dará un error si ninguna lo encuentra. Dentro de esta función se puede incluir código para verificar que el fichero exista (con la función file_exists). Si nuestros ficheros están organizados en una estructura de directorios, podemos definir ciertas directivas o convenciones para poder encontrar los ficheros de la clase fácilmente. Por ejemplo, definir que la clase Core_Utils_Func se encuentra en la ruta /Core/Utils/Func.php. También podemos aprovechar los namespace de php para definir las rutas a los ficheros.

Autor: Marçal Panareda

Estudiamos y analizamos su negocio en profundidad, definimos objetivos y planteamos la estrategia de marketing más adecuada centrándonos en conseguir cada uno de los objetivos propuestos. Solicita Presupuesto Ahora

Uso de cookies

En este sitio web utilizamos cookies propias y de terceros para mejorar nuestros servicios, para que usted tenga la mejor experiencia de usuario y analizar su visita. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.