Archive for the 'Programadores desamparados' Category

PHP: estirar el objeto

No, nada. Es un maldito título no-creativo. En realidad yo venía a hablar de mi libro a hablar del tema de extensión infinita de objetos clases. En algunos lenguajes de programación se pueden crear objetos e ir extendiéndolos hasta el infinito y más allá, no es el caso de PHP.

Por poner un ejemplo: si tenemos una clase que es AllTheApplication, es posible que queramos que herede las clases ApplicationRenderPage y ApplicationDatabase, algo como:

class ApplicationRenderPage {}
class ApplicationDatabase {}
class AllTheApplication extends ApplicationRenderPage, ApplicationDatabase {}

Sin embargo, esto no está (todavía) disponible en PHP por lo que nos dará un error. Eso no significa que no se puedan hereder cualidades de un objeto en tercer grado:

class ApplicationRenderPage {}
class ApplicationDatabase extends ApplicationRenderPage {}
class AllTheApplication extends ApplicationDatabase {}

En este último caso, AllTheAplication podría manejar también funciones y variables no protegidas tanto de ApplicationRenderPage como de ApplicationDatabase. Voilà!

Y una pequeña nota: aunque esto sea de cierta forma una solución posible, estoy casi seguro de que hay formas más consistentes de hacerlo, puesto que en este caso las clases se van extendiendo una a otra, de cierta forma ‘en anillo’ con lo que conlleva al hacer cambios en la estructura. Recomendaría algo parecido a:

class ApplicationRenderPage {}
class ApplicationDatabase {}
class AllTheApplication { function __construct() { $this->ApplicationDatabase = new ApplicationDatabase; $this->ApplicationRenderPage = new ApplicationRenderPage; } }

Así, basta con inicializar el objeto ($Application = new AllTheApplication) y de ahí acceder a los subobjetos (echo $Application->ApplicationDatabase->QueryCount si tenemos una variable que se llame QueryCount dentro del objeto ApplicationDatabase inicializado desde el construct de AllTheApplication). Ojo, no es oro todo lo que reluce y en este caso no se pueden acceder a las variables entre los distintos objetos (quizás usando parent::ApplicationDatabase, aunque no sé demasiado como se comportaría).

Y esto, señores, es una chuleta.

Maldito seas, Murphy

De la saga de ‘programadores desamparados’, o más bien jodidos y precedido por el post ‘Probabilidades‘ (de que cambien Twitter cuando peor te va), llega el ‘es que lo estás haciendo mal’.

No, no hablo de ninguna crítica pelotera (que haberlas, haylas), si no de la putada que supone pasarse 2 horas currando en una verdadera chorrada. No por eso, si no por el empacho que te metes después de cruasáns con miel, así andamos…

El módulo APC tiene una función (RFC1867) que básicamente permite mostrar una barra de carga de archivo en entornos que tengan el caché APC activado. Más o menos una linea asín en el formulario:

<input type=”hidden” name=”APC_UPLOAD_PROGRESS” value=”<?php echo uniqid() ?>” />

Pues bien, si tenemos un input ‘file’ para subir el archivo, tendrá que ir debajo del input oculto ‘APC_UPLOAD_PROGRESS’, por qué si no no funcionará la barra de progreso.

Obviamente si lo digo… sí, lo he hecho. 2… dos malditas horas para darme cuenta. Murphy, te odio.

PS: saludos a Aguarate, que le hace ilusión… ¬¬”