Just Sherekan - Blog de Programación

Compartiendo conocimiento… intentando no reinventar la rueda…

Data Access Object III (DAO + Factory)

Esta es la tercera parte de la serie de artículos sobre el patrón DAO (Data Access Object). En este artículo vamos a ver como aplicar el patrón DAO combinado con el patrón Factory.

Leer más

3 comentarios

Introducción a Smarty

Este artículo es una breve (muy breve) introducción a Smarty, en la cual pretendo explicar simplemente en que consiste este excelente motor de plantillas, sin entrar en detalle.

Leer más

3 comentarios

Debuggear en PHP con Xdebug

Xdebug es una extensión para PHP, que intenta mejorarle la existencia a los desarrolladores PHP a la hora de debuggear. En este artículo voy a mostrar algunas de las funcionalidades más útiles que trae esta excelente herramienta open source.

Leer más

1 comentario

Operador === (idéntico) en PHP

En PHP, podemos comparar variables de tipos de datos diferentes. Es decir, podemos comparar un boolean con un string, un int con un boolean, un string con un int, etc. sin problemas.

Por ejemplo, cuando comparamos mediante el operador == (igual) un boolean con un int, false es igual a cero, y true es igual a cualquier otro número. Es decir, que la siguiente condición es verdadera:


if (8 == true) {
	echo "I'm true!";
}

Bien, pero hay veces que necesitamos que una expresión de comparación devuelva true, sólo si las variables comparadas son del mismo tipo. Es decir, necesitamos que la expresión true == true sea true, y que la expresión true == 8 sea false. Veamos un ejemplo:

Tenemos una función, que toma dos valores como parámetros y los resta. Si el resultado es un número negativo, devuelve false. Y si no, devuelve el resultado de la resta.


function restaPositiva($a, $b) {
	if ($a - $b < 0) return false;
	return $a - b;
}

Entonces, para usar esta función, hacemos algo así:


function test($a, $b) {
	if (restaPositiva($a, $b) == false) {
		echo "Error al realizar la resta, no me se los números negativos.";
	} else {
		echo "El resultado de la resta es: " . restaPositiva($a, $b);
	}
}

Hagamos una prueba:


test(10, 4);

Como el resultado de la resta es positivo, devuelve el resultado:


El resultado de la resta es: 6

Otra prueba:


test(4, 5);

Como el resultado de la resta es negativo, devuelve false:


Error al realizar la resta, no me se los números negativos.

Todo parece ir bien, hasta que hacemos esto:


test(5, 5);

Resultado:


Error al realizar la resta, no me se los números negativos.

Ouch! la función restaPositiva() debería devolver cero y no false! qué es lo que pasa!?

Así es, la función restaPositiva() debería devolver cero, y de hecho, eso es lo que hace. El problema no está en la función restaPositiva(). Sino que está en la condición que hacemos en la función test():


if ($resultado = restaPositiva($a, $b) == false) {
// ...

Es decir, la función restaPositiva() devuelve el resultado de 5 - 5, o sea cero. Pero cuando hacemos la comparación, hacemos 0 == false, que devuelve true, y en realidad debería devolver false, ya que en este caso 0 es el resultado de la resta.

Esto es porque el operador == (igual) toma como iguales los valores cero y false. Entonces, cuando la función restaPositiva() nos devuelve cero, el operador == lo toma como que es false y no cero. Nosotros sólo queremos que false sea igual a false, pero cero sea igual a true. Entonces, ¿cómo solucionamos el problema?

Bueno, tenemos que usar el operador === (idéntico) que devuelve true sólamente si las variables comparadas son iguales y además son del mismo tipo. Es decir que si comparamos un boolean con un int, por más que el boolean sea false y el int cero, el operador === va a devolver false, ya que cero y false son distintos tipos de datos.

Este operador es muy útil. Ya que hay muchas funciones de PHP, que normalmente devuelven un número, pero si algo falla devuelven false. ¿Qué pasaría si la función no falla pero devuelve el número cero? ¿cómo hacemos para diferenciar cero de false? ¿cómo sabemos si la función falló o si devolvió el número cero? bueno, con el operador ===.

2 comentarios

JSP - Custom tags y JSTL

En este artículo vamos a ver que son los custom tags, como funcionan y como crear nuestra propia librería de tags. Además vamos a algo sobre JSTL, más específicamente su librería Core.

Leer más

5 comentarios

Instalación y configuración de Tomcat + virtual hosts

Esta es una guía rápida para instalar Tomcat, versión 5.5 sobre Linux configurando virtual hosts para poder hostear múltiples aplicaciones en una misma IP. Doy por sentado que ya tienen instalado el JDK 5, con todas las variables de entorno necesarias seteadas correctamente.

Leer más

3 comentarios

JSP - EL (Expression Language)

A partir de su versión 2.0, JSP trae soporte para EL (Expression Language). Con EL podemos acceder desde las páginas JSP a la data de nuestra aplicación (atributos de cualquier scope, parámetros de contexto, etc.) sin tener que utilizar scripting, de una manera limpia y sencilla, que van a agradecer a la hora de mantener la aplicación.

Leer más

1 comentario

API Reflection en PHP5

Si quieren una razón más para pasarse a PHP5, la tienen: ahora soporta API Reflection. En este artículo no me voy a centrar en explicar que es API Reflection, sino que voy a mostrar como se utiliza en PHP.

Leer más

3 comentarios

Punteros III [Punteros a funciones]

Si hay un tema confuso cuando se estudia punteros, ese es el de los punteros a función. La idea de este artículo es hacer una explicación sencilla, cuestión de entender como y para que se usan básicamente los punteros a función.

Leer más

3 comentarios

Introducción a JSP

Este es un intento de introducción a JSP, a modo de apunte. No vamos a entrar en detalle, simplemente vamos a ver cuales son los elementos de un JSP, como es el lifecycle de un JSP, en que se diferencia de un servlet, etc.

Leer más

11 comentarios

Próxima página »

Mexico