Archive for the 'PHP' Category

Thu, Jul 17th, 2008
posted by alfredojv 02:07 PM

La manera simple de manejar un error es usando die( ) cuando éste ocurre, sin embargo, a esto se le conoce como el suicidio del software. Aunque Martin Fowler nos dice que: “Si el costo de que el programa truene es pequeño y el usuario es tolerante así está bien”.

En PHP 5, como en muchos otros lenguajes, tenemos una alternativa al suicidio: Lanzando una excepción. Si no manejamos la excepción con un catch el sistema terminará el programa de la misma manera que die( ), agregándole un trazado de la pila (stack trace). Pero si en un futuro decidieramos manejar cierto error, de esta manera ya sería más sencillo.

¿Como funcionan?

El lenguaje de programaciónsabe que exception es una manera de comunicar un error o condiciones de excepción entre diferentes partes del programa. Por ejemplo, imaginemos que tenemos un método para conectar con una base de datos MySQL.

$db = new DBM;

if ( !$db->connect( ) )
	die("Error: no se puede conectar");
else
{
	// .....
	// --------->
	// .....
}

Esta es la versión suicida usando die( ), ahora veamos la versión utilizando el manejo de excepciones:

$db = new DBM;

if ( !$db->connect( ) )
{
	throw new Exception(
		"ERROR: no se ha podido conectar");
}
else
{
	// .....
	// --------->
	// .....
}

Si no hacemos nada para cachar la excepción, esto tiene el mismo efecto que die( ): Para la aplicación, además, este método hace una cosa adicional, imprime un stack trace, la cual puede ser muy usable para el debugging. Puedes obtener un stack trace sin usar excepciones usando las funciones debug_backtrace( ) y debug_print_backtrace( ). Pero lanzando una excepción es aún más sencillo de hacerlo.

Fatal error: Uncaught exception 'Exception' with message
'Error: no se ha podido conectar' in /path/exception.php:6
Stack trace:
#0 /path/exception.php(6): DBM::connect()
#1 /path/exception.php(12): DBM->connect()
#2 {main}
thrown in /path/exception.php on line 6

Si no queremos que los usuarios vean estos errores técnicos (por cierto no deberíamos por cuestiones de seguridad), estamos en una mejor posición por haber usado excepciones que usar die( ).  Si hemos usado die( ) en muchos lugares, tenemos que encontrar todas las ocurrencias y cambios en cada una. Si usamos excepciones, todo lo que necesitamos es cacharlas en algún lugar conveniente, por ejemplo, pudieramos registrar el mensaje y redireccionar al usuario a una pagina de error.

$db = new DBM;

try
{
	$db->connect( );
}
catch (Exception $e)
{
	$logger->log($e->getMessage());
	header("Location: error.php");
}

Como podrán ver el manejo de excepciones es algo imprescindible en el desarrollo de aplicaciones, ya que manejas de una manera más elegante los errores que surjan dentro de la aplicación. En próximas entregas les mostraré más ejemplos y profundizaré en el manejo de excepciones en PHP.

Mon, Jul 7th, 2008
posted by alfredojv 05:07 PM

La mayoría de aplicaciones requieren de interacción con una base de datos, ya sea del tipo relacional u orientada a objetos y en la mayoría de los casos la persistencia de datos está mezclada con la lógica del negocio. Lo que supone un problema a la hora de querer cambiar el motor de base de datos.

Para entenderlo mejor formularemos un ejemplo de la vida real.

Imaginemos que estamos desarrollando una aplicación en la empresa donde trabajamos y estamos utilizando MySQL como motor de base de datos. Estamos en la fase de pruebas (ya a punto de publicar el producto final), y por alguna extraña razón a tu jefe se le ocurre que mejor deberíamos usar Oracle, por que se lo recomendaron, piensa que es mejor, etc.

Que pasa si tenemos todo mezlcado (lógica del negocio, métodos de acceso a datos, etc),  se convierte en una tremenda pesadilla.

Para nuestra suerte existe el patrón de diseño Data Access Object (DAO), que se encarga de encapsular la interacción de una aplicación con la base de datos.

¿Como funciona?

DAO encapsula el acceso a la base de datos, de esta manera cuando la capa de lógica de negocio necesite interactuar con la base de datos, ésta utilizará los métodos ofrecidos por DAO. Generalmente la clase de operaciones que ofrece la capa de datos se le conoce como CRUD (Create, Read, Update y Delete).

Cuando la capa de negocios necesite almacenar datos (por ejemplo) solo tendrá que hacer referencia al método correspondiente para insertar los datos de la clase DAO, de esta manera si en algún momento se llegara a optar por usar otro motor de búsquedas, la capa del negocio no se debe preocupar ya que sólo bastará con actualizar la capa de datos. Si hablamos de patrones algunos detectarán por aquí que se están delegando responsabilidades, una buena práctica de la orientación a objetos.

De hecho el método de persistencia no debe de interesarle a la capa de negocios, es decir, a él no le importa si los datos se guardan en una tabla MySQL, XMl, Texto plano o se imprime, de esto se encarga DAO.

Por cada tabla de una base de datos relacional existirá un DAO. Esto consiste básicamente en una clase que es la que interactúa con la base de datos. Los métodos de esta clase dependen de la aplicación y de lo que queramos hacer. Pero generalmente se implementan las 4 funciones básicas (también conocidas como métodos CRUD).

Una vez entendido el funcionamiento de DAO, es conveniente explicar un nuevo término que nos será de ayuda para completar la implementación de nuestra capa de persistencia. Se trata de los DTO’s (Data Transfer IObject), los cuáles son utilizados por DAO para transportar los datos desde la base de datos hasta la capa de lógica de negocio o vice versa.

En pocas palabras un DTO es un objeto que en su interior tiene como atributos los mismos atributos del modelo, con sus correspondientes accessors (Setters y Getters).

dao-diagram.png

Diagrama DAO

Ahora veamos un ejemplo

Tenemos una aplicación que entre una de sus tantas funciones es controlar los datos de  clientes, y queremos usar DAO para el manejo de la persistencia de dicha aplicación.
Primero que nada de define el modelo 8en este caso de clientes), para después partir con la codificación de los respectivos DTO y DAO.

DTO

Class ClientesDTO
{
      private $id;
      prívate $nombre;
      prívate $direccion;

      public static function getID( )
      {
          return $this->id;
      }

      public static function getName( )
      {
          return $this->nombre;
      }

      public static function getAddress( )
      {
          return $this->direccion;
      }

      /* Setters */
      Public static function setID( $id )
      {
          $this->id = $id;
      }
      Public static function setName( $name )
      {
          $this->nombre = $name;
      }
      Public static function setAddress( $address )
      {
          $this->direccion = $address;
      }
}

DAO

class clientesDAO
{
     public static function create( $dto )
     {
          /* implementación para la creación de un nuevo registro */
     }

      /* aqui van los demás metodos CRUD */
}

Por obvias razones no escribí todo el código necesario ya que este artículo es meramente informativo, pero pienso que es explicito el ejemplo para comprender el uso del patrón DAO.
En la próxima entrega les mostraré un ejemplo más real, utilizando una mezcla de patrones, como el DAO, Singleton, Factory y Façade.

Wed, Jun 4th, 2008
posted by alfredojv 10:06 AM

siendo sincero no se si tenga algo que ver, ni tampoco es algo relevante, pero bueno aquí se los dejo para los curiosos.

Via aNieto2k

Sun, Oct 21st, 2007
posted by alfredojv 12:10 PM

En CalinSoft acabo de leer una lista con 40 sugerencias para optimizar el código PHP, aqui les mostraré algunas y los invito a que lean el artículo; verdaderamente vale la pena.

  1. Dedica tiempo a estudiar PHP, está en un continuo proceso de crecimiento y sus características van cambiando con el tiempo.
  2. Si necesitas escribir HTML hazlo directamente sin utilizar echo o print. Usa PHP para imprimir información sólo cuando sea necesario.
  3. Utiliza memory_get_usage() y microtime() para comprobar la velocidad y la memoria que consume tu código.
  4. Los if / else son siempre más rápidos que los switch / case.
  5. Si un método puede ser static, decláralo estático. La velocidad se incrementa en un factor de 4.
  6. do-while es más rápido que while, pero más lento que for. Lo primero a optimizar de un programa son los bucles ( un viejo truco de Algoritmia y Arquitectura de computadores ).
  7. Utiliza paths absolutos a los ficheros en los include() y require(), el SO tarda menos en resolver las rutas al fichero.
  8. $row[’id’] es hasta 7 veces más rápido que $row[id].
  9. Incrementar una variable global es dos veces más lento que hacerlo con una variable local.
  10. $localvar++ es hasta 15 veces más rápido que function inc(){ $localvar++; }.

Para leer las restantes deberás ir aquí.

Via | CalinSoft
Links |PHPLens (HOWTO on Optimizing PHP)

Sat, Jul 14th, 2007
posted by alfredojv 06:07 PM

Estoy seguro que muchos han leí­do y/o escuchado hablar sobre AJAX, el cual es algo viejo, pero relativamente recien descubierto. Mas de alguno (o la mayori­a) ha lei­do sus conceptos y demas; en este Tutorial no me enfocare a explicar los principios de esta metodologi­a de desarrollo Web. Para los que prefieren leer alguna introduccion pueden ir aqui­ (Por cierto en la red existen muchi­simos arti­culos sobre esta metodologi­a o bien si lo prefieren existen muy buenos libros recomendables).
Bien pasemos a lo que nos interesa, que es programar ejemplos en AJAX con ayuda de PHP.

Read the rest of this entry »

Thu, Jun 28th, 2007
posted by alfredojv 03:06 PM

-En esta ocasión comentaré un poco de la Programación Orientada a Objetos en PHP, iré mostrando ejemplos, para que esto sea cien por ciento práctico, la verdad es que estoy realizando un proyecto y con el fin de facilitarme las cosas decidí desarrollarlo Orientado a Objetos, de esta forma me facilitaba el trabajo y aprendía este estilo de programación, que si bien es cierto ya tiene algo de tiempo que salió en PHP no me había adentrado mucho en el.

Bueno fuera de tanto rollo, empecemos con un poco de teoría de lo que es la Programación Orientada a Objetos (POO).Si bien es cierto esta técnica de programación vino a revolucionar al mundo, ya que te lleva a un nivel de abstracción distinto, y puedes manejar la programación de una manera más sencilla y a su vez reutilizando el código para nuevos proyectos, con unas mínimas modificaciones.

La idea de esta técnica radica en manejar todo en base a la vida real, tomemos como ejemplo el objeto “Automóvil”, este objeto tiene las propiedades color, velocidad, transmisión, etc., como también las funciones (Léase Métodos) acelerar, frenar, parar, etc.

Veamos el ejemplo en código:

class auto
{
	var $llantas = 4;
	var $color = “”;
	var $velocidad = “”;
	public function acelerar($velocidad)
	{
		$this->velocidad += $velocidad;
		return $velocidad;
	}

	public function frenar($velocidad)
	{
		$this->velocidad -= $velocidad;
		return $velocidad;
	}

	public function parar( )
	{
		$this->velocidad = 0;
	}
}

Partiendo de este ejemplo se pueden crear diferentes automóviles con algunas propiedades distintas o algunas otras nuevas, por ejemplo:

<?php

$bmw = new auto;

$mini = new auto;

$bmw->color = "rojo";

$mini->color = "azul";

$bmw->acelerar(60);

$mini->acelerar(40);

// a esta altura de la carrera el bmw va ganando por que lleva mas velocidad :P 

?>

Como podremos ver, hemos creado dos objetos del tipo “auto”, que son un bmw y un mini, a cada uno les establecimos un color distinto, y les indicamos que aceleren, como se aprecia en el ejemplo el bmw esta acelerando a una velocidad de 60 k/h, por que lo que va adelantado en la carrera contra 40 k/h que lleva el mini. Espero que con este ejemplo quede más claro el concepto de orientación a objetos, por el momento no entraré en más detalle sobre este tipo de programación ya que existen muchos libros sobre ella y el tema de este tutorial es precisamente de su aplicación en PHP.

Pasando a otro punto, veamos ahora una aplicación real en php, supongamos que queremos manejar información en bases de datos, veamos como ejemplo una clase:

class DB
{
	// en esta clase declararemos los metodos de algunas de las funciones de php y mysql
	var $link;
	var $ssql;

	public function connect($server='', $username='', $password='')
	{
		$this->link = mysql_connect($server, $username, $password);
	}

	public function error()
	{
		return mysql_error($this->link);
	}

	public function query($query)
	{
		return mysql_query($query, $this->link);
	}

	public function insert($table,$rows,$values)
	{
		$this->ssql = "INSERT INTO $table ($rows) values ($values)";
		return mysql_query($this->ssql, $this->link);
	}

	public function fetch_array($result, $array_type = MYSQL_BOTH)
	{
		return mysql_fetch_array($result, $array_type);
	}

	public function fetch_object($result)
	{
		return mysql_fetch_object($result);
	}

	public function close()
	{
		return mysql_close($this->link);
	}

}

Por cuestiones de agilizar la lectura, solo eh declarado algunas de las funciones básicas para el manejo de base de datos, ahora veamos su implementación.

<?php

	$sql = new DB( );
	$sql->connect('localhost',"usuario','password'); // conectamos con la base de datos...
	$sql->query('use users'); // correspondiente a la funcion mysql_select_db( );
	$rid = $sql->query("SELECT * FROM users");

	while ( $row = $sql->fetch_object($rid) )
	{
		echo $row->nombre;
		echo "<br>";
		echo $row->dirección;
	}

?>

Con este ejemplo pienso que les quedará claro la implementación de POO en PHP, igual si desean usar la clase de ejemplo y agregarle las funciones restantes lo pueden hacer, esto es todo por hoy, espero que les haya servido de algo mi explicación, pronto escribiré algo mas complejo, es fue a manera de introducción, por lo pronto terminamos, cualquier duda o comentario, o si tengo algún error en alguno de los ejemplos, envíenme un mail.

 
throat cancer pictures, lesbian cheerleader, ass fisting, gothic facial, latin booty porn, how to get a bigger butt, swedish pornstars, smoking erotica, dad and little girl, mature hairy pussy, latino fuck, free fantasy football cheat sheets, bare pregnant, stop breaking the law asshole, gay fat men, military whores, swallow his cum, bbw personals, hardcore gay sex, screaming orgasms, men, blood hound gang discovery channel, young child models, tanned skinny girls, paris hilton's vagina, sexy studs, girls playing with sex toys, female public urination, dvd buying adult, free ffm movie, wife tgp, bondage pony girl, feet little girls galleries, dicks in chicks, nine inch nails video downloadz, voyeur teens, horses dick in a pussy, cum swallow wives, bisexual fuck galleries, granny cum, teen zoo sex, man inserts head in vagina, sexy stockings galleries, feet pajamas for adults, brunette porn stars, hairy, day extreme, vikings suck, ebony pornstars, free porn pics, 12 year old girls in bikinis, redhead blowjobs, cfnm party photos, metro retro furniture, SWAP, dildo porn, fisting videos, large ebony melons, gays military navy, paris hilton sex tape in night vision, harry potter xxx, shemale gallery, naked gay midgets, boy spy cam, french maid fetish, gothiiss, filipina gangbang, perfect tanned breasts, law enforcement dress uniforms, two penises in one vagina, advanced masturbation, womens hiking boots, gang bang thumbnail galleries, sexy teen, super tits, sexy women thongs, celeb in hosiery, 2 6 forced full matrix x, male butts, live video clips, misty naked pokemon hentai, office, dick francis, plus size sexy lingerie, young chubby, brunette porn, 40 second paparazzi video, midget pants, zoo sexy, hung ebony shemales, retro web designs, slut stories, rape seed, bikini models reveal all, gay anal double penetration, deepest throat, gay son sucks dad, hustler girls of poker, military, oily handjob, cowboy boots for teens, RIMJOB, japanese fisting, studs in hardcore action, stop smoking by hypnosis, asian sexy teen, reality cum, paris hilton full video, crossed legs pantyhose, xxx erotica, sex with blondes, straight male pornstars, anything extreme .com, slut cuckold wife stories, boob enormous natural, midget sex, closeup teen anal, underage blowjobs, man who sucks dick, sexy ebony women, daddies fisting, russian spanking, males jack off, free cfnm pictures, very young blowjobs, free lebian erotica, forced to watch my wife, clit cock cum dick suck, floor mat outdoor, giant cock in tight pussy, her info jizz remember, movie video clips, fantasy college football, Cheerleader, dad fuck daughter, teens in short skirts galleries, medical group management association, VOYEUR, sakura hentai, college coeds fucking, ethnic gay mexican porno boyz, got jizz, young cheerleaders, misty pokemon nude, audio sounds of women orgasm, pussy on to her mouth, female legs, extreme bdsm, muscular gay men fucking, linda tran nude, porn dvds, clips, man nipples pierced, older horny office, feet fucking, midget sex, cfnm forum visual, nude pregnant women, blondes sucking cock, flexible nude teens