Programming (aka scripting/writing) PHP is so funny you never know what is the next thing that will happen when you compare two variables or simply try to increment an integer.
You can complain about its design (OOP), or its functions’ names or whatever you want, but you know how cool and funny is to program in PHP. It should be a must within any programming 101 course ;-).
Here my compilation of PHP funniest things:
printf("Integers and Strings\n");
echo "----------------\n";
printf("%s\n", ('0' == 0) ? 'true' : 'false');
printf("%s\n", ('0' === 0) ? 'true' : 'false');
printf("%s\n", ('string' == 0) ? 'true' : 'false');
printf("%s\n", ('string' === 0) ? 'true' : 'false');
printf("%s\n", ('string' == 1) ? 'true' : 'false');
printf("%s\n", ('string' === 1) ? 'true' : 'false');
printf("%s\n", ('0000e12345' == '0e12345') ? 'true' : 'false');
printf("%s\n", ((string) '0123' == (string) '123') ? 'true' : 'false');
printf("%s\n", ('007' == '7') ? 'true' : 'false');
printf("%s\n", ('Bond' == 'Raul') ? 'true' : 'false');
$i = null;
echo (++$i) . "\n";
echo ($i+=1) . "\n";
$i = null;
echo (--$i) . "\n";
echo ($i-=1) . "\n";
printf("\nBitwise Operators\n");
echo "----------------\n";
printf("%s\n", (~0 & 0x20) ? 'true' : 'false');
printf("%s\n", (~'0' & 0x20) ? 'true' : 'false');
echo (9 & 8) . "\n";
printf("%s\n", (9 & 8 == 8) ? 'true' : 'false');
echo (8 & 8) . "\n";
printf("%s\n", (8 & 8 == 8) ? 'true' : 'false');
echo "\nIEEE 754 friends et al\n";
echo "----------------\n";
echo (7 % 2.4) . "\n";
printf("%s\n", -1 % 7);
printf("%s\n", 3333333333 % 3);
printf("%s\n", 2863311530 % 25);
printf("%s\n", 2863311530 % 256);
printf("\nOther comparisons\n");
echo "----------------\n";
printf("%s\n", ($a = 0 or $a = 'string') ? $a : $a);
printf("%s\n", ($a = 0 || $a = 'string') ? $a : $a);
printf("%s\n", (array() == false) ? 'true' : 'false');
printf("%s\n", (array() === false) ? 'true' : 'false');
It should produce 29 results. It’s said that one guy once was able to predict (Yeah! I meant to predict) the exact output for every single one. PHP is so lovely.
Could you say what is the exact output for each and everyone of them?
El fin de semana pasado Adal me preguntaba si conocía algún método sencillo de poner un planet en marcha, y la verdad, me pilló un poco fuera de juego. Existe Planet que es usado por muchos proyectos de Software Libre, el problema es que está escrito en Python. La mejor solución era algo escrito en PHP.
Existen varias soluciones, incluso un plugin para WordPress, en la mayoría de los casos hace falta usar Cron para actualizar las entradas y Adal quería evitar el uso de Cron. Además la mayoría de los sistemas de planet no son sencillos de poner en marcha, generalmente porque son añadidos a otras aplicaciones. He despachado todo este rollo para anunciar mi propio sistema de planet: Simple PHP Planet.
Simple PHP Planet hace uso de MagpieRSS, una estupendo parser de RSS para PHP que me ha evitado muchos dolores de cabeza, ya que facilita un sistema de caché que evita tener que leer remotamente todos los archivos RSS cada vez.
La puesta en marcha es bastante sencilla, basta con añadir unas líneas a un archivo de configuración con las URLs de los feeds RSS, y opcionalmente se puede subir una imagen representativa.
La licencia: he decidido publicar Simple PHP Planet bajo la Affero General Public License. Qué quiere decir esto? A groso modo, puedes hacer lo que te venga en gana con el código. Pero en caso de realices cambios, aunque no vayas a distribuir la aplicación y sólo la vayas a usar en tu servidor, estás obligado a publicar los cambios que hayas realizado.
Puedes visitar el planet de demostración donde podrás bajar el zip con todo lo necesario para tener tu propio planet. Escucho problemas y sugerencias en los comentarios de esta entrada y en mi dirección de correo.
Este pequeño y humilde hack se lo dedico a Adal.
He decidido decapitar el FON Maps Liberator, el proyecto nació como parte de un reto que me propuso mi amigo Jose, yo acepté y me puse manos a la obra, en unos días Jose tenía su aplicación lista.
Pude contactar con la gente de FON gracias a Alvy de Microsiervos. Aitor, del equipo técnico de FON, tardó poco en ponerse en contacto conmigo, intercambiamos unos cuantos correos compartiendo algunas ideas. Todo esto sucedía mientras esperaba la respuesta del departamento Legal de FON, ya saben, las cosas de palacio van despacio.
Una serie de circunstancias especiales han propiciado que el proyecto pierda interés para mi, mi tiempo es muy limitado y los días siguen teniendo 24 horas. Tenía que precindir de alguna cosa y una de ellas ha sido el FON Maps Liberator. A las circunstancias especiales le tenemos que añadir las condiciones impuestas desde el departamento Legal de FON, algunas de ellas asumibles y perfectamente entedibles, otras, sin embargo y desde mi punto de vista, desproporcionadas y totalmente innecesarias. Así que la poca ilusión que me quedaba en este proyecto voló al leer las condiciones impuestas por FON.
Me hubiese gustado publicar el código del FON Maps Liberator, pero entre las condiciones de FON no se me permitía ceder la aplicación a ninguna tercera persona sin nuestro consentimiento por escrito.
En unos días tendré listo un nuevo mashup con Google Maps de por medio, he podido reaprovechar parte del código escrito para el FON Maps Liberator para hacer una aplicación muy sencillita sobre la que muy pronto podré decir de qué va.
Agradecer de nuevo la atención mostrada por Alvy de Microsiervos y Aitor de FON. Gracias a los dos.
About Raúl
Raúl Ochoa, a spaniard working for Tuenti in Madrid, Spain. More about me.
Subscribe to the feed
If you want to receive a notification when I update the website, you only have to add the feed to your reader, or submit your email address and I'll let you know.
Raúl's Twitter: Non-tweetable RegEx(s) make me cry :'-(. 3 days ago