Archivo de la etiqueta: PHP Tips

Nombres cortos de variables en bucles – PHP Tips

La inmensa mayoría de programadores, entre los cuales me incluyo, a la hora de escribir un bucle for lo hacemos usando la variable i, y nos quedaría de la siguiente manera:

for ($i = 0; $i <= 10; $i++) {
 // TODO Procesos a ejecutar
}

Este código esta claro y es muy fácil de interpretar.

Imaginemos ahora que tenemos un array llamado $ligas en el cual se almacenan las ligas de fútbol, cada clave de este array apunta a otra array con los equipos de esa liga, y cada clave numérica de este array apunta a un array donde aparecen los nombres de los jugadores.

for ($i = 0; $i < count($ligas); $i++) {
    for ($j = 0; $j <= count($ligas[$i]); $j++) {
        for ($k = 0; $k <= count($ligas[$i][$j]); $k++) {
            echo $ligas[$i][$j][$k];
        }
    }
}

Si realizamos el diseño de nuestros bucles de esta manera seguramente, si queremos compartir este código con alguien le resultara un poco difícil de entender, y cuando digo alguien también nos incluyo a nosotros mismos dentro de un tiempo cuando revisemos el código. Quizá si realizáramos este código de esta manera seria un poco mas claro

for ($liga = 0; $liga < count($ligas); $liga++) {
    for ($equipo = 0; $equipo < count($ligas[$liga]); $equipo++) {
        for ($jugador = 0; $jugador < count($ligas[$liga][$equipo]); $jugador++) {
            echo $ligas[$liga][$equipo][$jugador];
        }
    }
}

Ahora queda mas claro que es lo que se muestra en este bucle.

Conocer el sistema operativo donde se ejecuta nuestro PHP – PHP Tips

A veces podemos vernos en la necesidad de conocer que sistema operativo, o versión de este es en el que se esta ejecutando nuestro codigo PHP, por ejemplo si necesitamos establecer la configuración de las locales.

Tenemos dos opciones para conocerlo, la primera es por medio de la constante PHP_OS, y otra es con la función php_uname(). La primera solo nos va a devolver el sistema operativo, p.e Linux, FreeBSD, WINNT, … en cambio con la funcion nos devolvera una información mas completa. Por ejemplo

 

echo php_uname();
echo PHP_OS;

/* Algunas posibles:
Linux localhost 3.2.0-27-generic #43-Ubuntu SMP Fri Jul 6 14:46:35 UTC 2012 i686
Linux

FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001
FreeBSD

Windows NT XN1 5.1 build 2600
WINNT
*/

 

La funcion php_uname(), puede aceptar varios parametros, mode para poder especificar que tipo de salida queremos. Estos parametros son:

  • ‘a’: Es la opción por defecto. Contiene todos los modos de la secuencia “s n r v m”.
  • ‘s’: Nombre del sistema operativo. eg. FreeBSD.
  • ‘n’: Nombre del host. eg. localhost.example.com.
  • ‘r’: Nombre de la distribucion. eg. 5.1.2-RELEASE.
  • ‘v’: Informacion de la version. Varia mucho dependiendo de los sistemas operativos.
  • ‘m’: Tipo de maquina. eg. i386.

 

echo php_uname();
// Linux pajaroto.ensenalia.com 3.2.0-27-generic #43-Ubuntu SMP Fri Jul 6 14:46:35 UTC 2012 i686
echo php_uname('s');
// Linux
echo php_uname('n');
// Localhost
echo php_uname('r');
//3.2.0-27-generic
echo php_uname('v');
// #43-Ubuntu SMP Fri Jul 6 14:46:35 UTC 2012
echo php_uname('m');
// i686

+ Info http://es.php.net/manual/en/function.php-uname.php

Fechas PHP a MySQL y vuelta – MySQL Tips

PHP Programming languageUna de las cosas con las que toca lidiar practicamente siempre que trabajamos con fechas contra una base de datos MySQL es que la base va MySQLa almacenar las fechas de la manera ISO “año-mes-dia” y nosotros a la hora de trabajar trabajos con el formato Europeo, ya sea “dia-mes-año” o “dia/mes/año”.

Durante muchos años trabajaba con la tecnica de la función bidireccional, es decir, me creaba una función la cual cuando le llegaba la fecha la convertia en un sentido u otro.

function cambiaFormatoFecha($fechaOriginal)
{
 //Dividimos la fecha de la hora si existe
 $partesStamp = explode(" ", $fechaOriginal);
 // La primera parte es la fecha, la segunda la hora
 $partesFecha = explode ( "-", $partesStamp[0] );
 // La fecha final
 return $partesFecha[2] ."-".$partesFecha[1]."-".$partesFecha[0];
}

MySQL guarda las fechas separadas por guiones, así que si nosotros definimos el formato de fecha separado con guiones, pues eso que tenemos ganado y esta función nos convierte tanto nuestras fechas cuando las introducimos como las fechas que devuelve el MySQL.

Trabajar con esto puede parecer que es una gran ventaja, pero la verdad que a nivel de rendimiento no lo es ya que supone ejecutar la función cada vez que aparezca un registro de fecha.

Una solución bastante mas eficiente es la de procesar las fechas en la consulta. Para eso utilizaremos las funciones incorporadas de MySQL DATE_FORMAT y STR_TO_DATE.

Si queremos unos registros de una determinada fecha podemos hacer:


SELECT * FROM `tabla` WHERE fecha LIKE STR_TO_DATE('mifecha','%d-%m-%Y);

En esta consulta mifecha esta en el formato dia-mes-año

Si queremos ver las fechas en el formato dia-mes-año


SELECT DATE_FORMAT(fecha,'%d-%m-%Y) FROM `tabla`;

Para mas información

STR_TO_DATE http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_str-to-date

DATE_FORMAT http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-format

Función que nos devuelve el numero de días de un mes

Mas de una vez nos habremos visto en la duda de, como hacer que según el mes y el año que hemos marcado que nos de los dias que tiene ese mes, pues bien, en php hay una función interna que nos facilita el trabajo, esta es cal_days_in_month, y hay que pasarle como parametros el calendario que queremos, por ejemplo CAL_GREGORIAN, el numero del mes, y el año y nos devuelve el numero de dias que tuvo ese mes.

$numeroDias = cal_days_in_month(CAL_GREGORIAN, 10, 2008);
echo $numeroDias; //Devolvera 31

vía PHP: cal_days_in_month – Manual.

phpmaster | 10 Tips for Better Coding

 

Gran articulo en el que se ven 10 puntos que hay que tener muy en cuenta a la hora de programar un buen y mantenible codigo php.

phpmaster | 10 Tips for Better Coding.

Clase para la conexión a Base de Datos con PDO basada en Singleton Pattern – PHP Tips

Esta es una clase la cual la uso muchísimas veces para establecer la conexión a una base de datos con PHP. Se establece la conexión via PDO y esta basada en el patrón Singleton.  Una de las ventajas que tiene esta clase es que solo establece la conexión una vez, y por muchas veces que sea instanciada no duplica la conexión.

final class DBConnection {
	
    private static $_handle = null;
    private static $_dsn = "mysql:dbname=mydb;host=my.host.com;port=3306";
    private static $_user = "myUserName";
    private static $_password = "myPassword";
    private static $_options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); // SET UTF-8
    /**
     * Deny Construct
     */
    private function __construct()
    {
    }
    /**
     * Deny Clone
     */
    private function __clone()
    {
    }
    /**
     * Function to connect width database
     */
    function connect()
    {
        if ( is_null( self::$_handle ) ) {
            try {
                self::$_handle = new PDO( 
                    self::$_dsn, self::$_user, self::$_password, self::$_options 
                   );
            } catch ( PDOException $error ){
                die ( $error->getMessage() );
            }
        }
        return self::$_handle;
    }
}

La tengo disponible en http://gist.github.com/1771941 o para clonar con Git en git://gist.github.com/1771941.git

Comandos Zend Framework Command Line Console Tool

Dejo aquí los comandos de la zf tool en la versión de Zend Framework 1.11.11

Zend Framework Command Line Console Tool v1.11.11
Usage:
    zf [--global-opts] action-name [--action-opts] provider-name [--provider-opts] [provider parameters ...]
    Note: You may use "?" in any place of the above usage string to ask for more specific help information.
    Example: "zf ? version" will list all available actions for the version provider.

Providers and their actions:
  Version
    zf show version mode[=mini] name-included[=1]
    Note: There are specialties, use zf show version.? to get specific help on them.

  Config
    zf create config
    zf show config
    zf enable config
    Note: There are specialties, use zf enable config.? to get specific help on them.
    zf disable config
    Note: There are specialties, use zf disable config.? to get specific help on them.

  Phpinfo
    zf show phpinfo

  Manifest
    zf show manifest

  Profile
    zf show profile

  Project
    zf create project path name-of-profile file-of-profile
    zf show project
    Note: There are specialties, use zf show project.? to get specific help on them.

  Application
    zf change application.class-name-prefix class-name-prefix

  Model
    zf create model name module

  View
    zf create view controller-name action-name-or-simple-name module

  Controller
    zf create controller name index-action-included[=1] module

  Action
    zf create action name controller-name[=Index] view-included[=1] module

  Module
    zf create module name

  Form
    zf enable form module
    zf create form name module

  Layout
    zf enable layout
    zf disable layout

  DbAdapter
    zf configure db-adapter dsn section-name[=production]

  DbTable
    zf create db-table name actual-table-name module force-overwrite
    Note: There are specialties, use zf create db-table.? to get specific help on them.

  ProjectProvider
    zf create project-provider name actions