lunes, 28 de noviembre de 2011

Nociones de PHP

Esto es un resumen que hice hace un par de años en mi primer contacto con PHP:

* La sintaxis es tipo C.
* Las páginas tienen extensión '.php', empiezan por '' y acaban por '?>'.
* Todas las variables son por referencia y todas tiene el prefijo '$' (p.e. $num). Si se antepone el prefijo '&' (p.e. &$num) accedemos al puntero de la variable.
* No es necesario declarar la variables explícitamente, aunque puede ser buena idea hacerlo con los arrays.
* Por defecto solo se puede acceder a las variables locales. Para acceder a una variable global hay que anteponer 'global' (p.e. global $num).
* Las constantes (p.e. const max_num) sí pueden ser globales, pero solo pueden ser tipos simples.
* El comparador de igualdad es '==' aunque se puede usar también '===' que además fuerza a que los elementos comparados sean del mismo tipo (idem con '!=' y '!==').
* Para imprimir un texto en pantalla se utiliza 'echo()' (p.e. echo('Hola.\n');).
* Las cadenas pueden representarse entre comillas simples o entre comillas dobles. Las primeras son literales, mientras que las segundas realizan sustitución de contenido. P.e. si tenemos una variable $texto con el valor 'hola', echo('Prueba: $texto'); devuelve 'Prueba: $texto', mientras que echo("Prueba: $texto"); devuelve 'Prueba: hola'.
* El operador de concatenación de cadenas es el punto '.' por lo que el ejemplo anterior se podría haber escrito como echo('Prueba: ' . $texto);.
* El "if compacto" tiene esta forma: (evaluación ? parte cierta : parte falsa). P.e.: 'echo($num < 0 ? -1 : $num);' es equivalente a 'if ($num < 0) echo(-1); else echo($num);'.
* Ejemplo de asignación de valor por defecto a los parámetros de las funciones: 'function f1($num = -1) {...}'.
* Ejemplo de definición de clase: 'class Clase1 { private static $my_write = NULL;...}'. Ejemplo de uso de clase: 'Clase1::$my_write...'. Ejemplo de uso de clase llamándose a si misma: 'self::$my_write...'.
* Los arrays son muy flexibles. Son más bien árboles que pueden contener elementos de tipo y número diferente. Además se puede acceder a los elementos por índice o por nombre, y los índices no tienen por qué ser consecutivos.
* 'print_r()' recorre un array e imprime cada elemento junto con el nombre de su índice.
* Ejemplo de impresión de array: $tabla = array('cero' => 0, 1 => 'uno', 8 => 'ocho', 'doce' => 12); $tabla[3] = 'tres'; print_r($tabla);
* 'extract()' lee las partes de un array y genera automáticamente tantas variables como elementos con el nombre y valor correspondiente. Ejemplo para el array anterior: 'extract($tabla); echo($doce);'.
* Para depuración de errores por pantalla puede ser muy útil 'debug_print_backtrace()'.
* Para acceder a una BDD MySQL sin ODBC se debe instalar el paquete 'php5-mysql'. Ejemplo de uso: '$conn = new mysqli($host, $username, $password);'.

jueves, 24 de noviembre de 2011

Añadir acción al menú contextual en Windows

La aplicación GNU 'gzip.exe' es de consola de comandos y por comodidad he creado la acción 'Comprimir APK a gz' que ejecuta 'gzip -k' sobre ficheros del tipo APK:
  1. Copiamos 'gzip.exe' a 'C:\WINNT' (es un buen sitio porque está en los "Path")
  2. En una carpeta cualquiera, abrimos 'Herramientas -> Opciones de carpeta'
  3. En 'Tipos de archivo' añadimos una nueva extensión (si no existe ya)
  4. En 'Opciones avanzadas' añadimos una nueva acción con:
  • Acción: Comprimir APK a gz
  • Aplicación: C:\WINNT\gzip.exe -k "%1"