The New Cult of Dead Cow

April 2, 2007






Propiedades en PHP5

Filed under: Programacion, PHP, Web

Ya antes mencione como utilizar las propiedades en php5.

Ahora, jugando un poco con el codigo, descubri una nueva forma, un tanto mas ordenada, de codificarlas.

Tenemos nuestra clase

class MyClass
{

}

Para poder usar las propiedades necesitamos definir la funcion especial __get

public funcion __get($attr)
{

}


Como vimos antes, lo usual es poner un bloque switch dentro de la funcion __get y compararlo con cada valor de attr y dar la respuesta en funcion de eso.  Sin embargo si queremos podemos definir cada propiedad existente en nuestra clase en su propia funcion de la siguiente manera:

private function __get_Estado()
{
    return “holas”;
}

Aca, estamos definiendo la propiedad Estado, la cual me devuelve la cadena “holas”. Como se puede ver se ha definido como privada, asi no se puede llamar a esta funcion desde el exterior. Y ahora para hacer que cuando se utilice el attributo se ejecute la funcion ponemos el siguiente codigo en la funcion __get

public function __get($attr)
{
    $functionName = “__get_”.$attr;
    return $this->$functionName();

}

Al final, asi quedaria nuestra clase:

class Departamento
{
 
    public function __get($attr)
    {
        $functionName  = “get”.$attr;
        return $this->$functionName();
    }

    private function getEstado()
    {
        return “holas”;
    }

}

Si queremos, podemos probar la clase

$a = new Departamento();

echo “#”.$a->Estado.”#”;


Y nos devolvera

#Holas#


Bueno espero, les haya servido ;)

Technorati Tags: , , , , ,

February 21, 2007






Extends y New en PHP5

Filed under: Programacion, PHP, php-ORM, Web

Trabajando en phpORM, se dio la necesidad de poder crear un objeto del tipo clase Hija desde el codigo de la clase ORM

phpORM dispone de una clase base llamada ORMBase, sin embargo esta clase es abstracta, es decir, no puede ser utilizada directamente. Para usar phpORM se debe crear una clase que herede de phpORM.


Este codigo podria servir en cualquier situacion que debamos crear una clase heredable ( abstracta ) y necesitemos crear objetos  sin saber el nombre de las clases Hijas.

<?php

abstract class Base
{

    function nuevo()
    {
        $className = get_class($this);
        return new $className();
    }
   
   
    function quiensoy()
    {
        echo “soy Base\n”;
    }

}

class Hija extends Base
{
   
    function quiensoy()
    {
        echo “soy hija\n”;
    }

}

$a = new Hija();
$b = $a->nuevo();

$b->quiensoy();

?>

La funcion nuevo dentro de la clase Base, es la que se encarga de crear el objeto. Este objeto sera siempre del mismo tipo que el objeto que hizo la llamada.

Technorati Tags:

February 1, 2007






php-ORM

php-ORM es un nuevo y pequeño motor de persistencia de objetos para PHP5. Se ha tratado de realizarlo lo mas usable y flexible posible. Y aunque todavia esta en desarrollo ya va teniendo muy buena pinta.

Entre las cosas que ya puede hacer estan:

  • Recuperar un registro de la base de datos usando su PK
  • Guardar cambios del registro en la base de datos
  • Recuperar un registro de la base de datos usando algun campo UNIQUE
Y este es nuestro TODO-List:
  • Permitir la busqueda usando cualquier campo
  • Terminar el soporte para las claves foraneas
  • Terminar la pagina web.

Este es un ejemplo de un script que usa php-ORM:

<?php

    require(’ORM.php’);

    class Test extends ORM
    {
        protected $tablename = "notarios";
       
        protected $PK = array("id2");
        protected $names = array("id2"=>"id","login"=>"login","clave"=>"passwd","appaterno"=>"appaterno","apmaterno"=>"apmaterno", "nombre"=>"nombre", "email"=>"email", "telefono"=>"telefono", "celular"=>"celular");
       
        protected function createObject($pk)
        {
            return new Test($pk);
        }
       
    }

    $a = new Test(null);
    $b = $a->getOneBy("login","czarate");
    echo $b->login;
    echo "\n\n";
?>


Eso es lo minino que hay que definir en php-ORM para que funcione con nuestra base de datos.

Para los que se animen a probarlo, la pagina web del proyecto es php-ORM

Technorati Tags: php, orm, programacion

powered by performancing firefox






Herencia y propiedades en PHP5

Filed under: Programacion, PHP, Personal, Web

Gracias a enzo, pude ver la solucion al problema del post anterior.

Al final todo se trataba de un switch bien ubicado. Me explico, esta seria mi clase base:

class Base
{

protected $nombre;
protected $edad;

public function __get($attr)
{

switch($attr)
{

case "nombre":

return $this->nombre;
break;
case "edad";
return $this->edad;
break;
}
}
}

y en la clase heredada quedaria asi:

class Hija extends Base
{

public function __get($attr)
{

switch($attr)
{

case "edad";
return 0;
break;
default:
return parent::__get($attr);
break;
}
}
}

Y listo con eso no hay necesidad de reescribir todo el codigo de las propiedades. :P

January 31, 2007






Propiedades en PHP5

Las propiedades son metodos que te permiten acceder a los atributos de una clase de una manera ordenada. Me explico, tenemos la siguiente clase:

class Persona{ public nombre; public edad; }
Cuando la queremos usar hacemos lo siguiente:
$per = new Persona(); $per->nombre = "Arthas"; $per->edad = 24;
Sin embargo nada nos impide hacer :
$per = new Persona(); $per->nombre = 23; per->edad = "Lo que sea";
Las propiedades en cambio nos permiten asegurarnos que el acceso a los atributos de una clase, se hacen de la manera especificada por nosotros. Ejemplo:
class Persona{ public nombre; public edad; public __set($attr,$value) { switch ($attr) { case "nombre": if ( ) { $this->nombre = $value; } else { throw new Exception("Informacion no valida"); } } } }
Asi cuando hacemos uso de las propiedades, podemos controlar como se accesa a la informacion. El problema viene cuando heredamos una clase, y en la clase hija queremos redefinir las politicas de control sobre algunas de las propiedades. Por ejemplo, quisiera que en la clase heredada solo se grabaran los 15 primeros caracteres. La unica manera es redefinir todo el metodo __get, cargandonos con eso toda una gran cantidad de trabajo. O sea volveriamos al copy & paste, para tener de nuevo el metodo completo y luego hacer las modificaciones que necesitaramos :S. NADA mas fuera de la OO. En fin, la única solución que se me ocurre es crear una función que reemplace el acceso a esa propiedad, por ejemplo setNombre($value), pero esto no impediria que se ingrese por el metodo antiguo. Bueno si a alguien se le ocurre otra forma de hacerlo , por favor aviseme. Haber si para php6, la gente de Zend se les ocurre separar el codigo de acceso para cada propiedad. Algo mas o menos asi:
class Persona{ private nombre; property nombre { function __get() { return $this->nombre; } function __set($value) { //Codigo de validacion $this->nombre = $value; } } }

January 26, 2007






JQuery en PHP-es

Filed under: Programacion, PHP, JQuery, Web

Estan todos invitados a la charla virtual que dare el  Domingo 4 de Febrero a las 3pm (-5 GMT) sobre JQuery en irc.freenode.net#php-es.

powered by performancing firefox

December 21, 2006






Exquisiteces del PHP

Filed under: Programacion, PHP

Trabajando en un pequeño modulo del php, necesitaba verificar si la consulta se habia realizado correctamente.
Vale decir, que las consultas las trabajo con adoBD.php

El codigo que manejaba era:

$sql = “select * from tabla where codigo =$id”;
$rs = $db->GetRow($sql);

if ( $rs == false ) die (”Consulta Fallida”);

El problema radicaba, cuando el parametro id que les pasaba no existia en mi base de datos, el codigo me mostraba siempre consulta fallida y lo que yo esperaba era el array ( $rs ) vacio .. :S

Lo que habia pasado era que al no tener datos q devolverme la consulta me entregaba un array vacio, sin embargo en el if ( $rs == false ) se trataba de comparar dos tipos de datos diferentes, por lo cual php los convertia automaticamente a un mismo tipo, en este caso supongo que boleano.

En boleano, un array vacio es false. Por lo tanto mi script se iba por el camino equivocado.

La solución, es cambiar la comparación con

if ( $rs === false ) die (”Consulta Fallida”);


Ahora,  esa igualdad solo sera verdadera cuando la variable $rs contenga un tipo de dato boleano. Esto solo sucede cuando se envio una sentencia sql incorrecta, como por ejemplo haciendo un select a una tabla inexistente.

March 29, 2006






Las corridas de toros

Alguna vez han visto una corrida de toros, un valiente torero entra a una arena donde sueltan a un toro cansado y estresado. El torero tiene una espada, banderillas, capa para confundir al toro, 4 ayudantes, y un piquero montado en caballo. La verdad, yo no tengo nada en contra las actividades deportivas de supervivencia humana, pero que sean de verdad. Que metan a un torero sin mas armas que su cuerpo y un toro sin mas armas q su cuerpo, juro q eso si me encantaria y es más, iria a aplaudir … al toro, por supuesto.

Pero aun asi, las corridas son con animales q tiene la minima posibilidad de defenderse. Pero y la caza de focas, llegan tambien valientes humanos a cazar focas bebes, indefensas, con garrotes y las muelen a golpes lo suficiente para q no escapen. Ni siquiera se toman la molestia de terminarles el sufrimiento, mientras van por otras focas.

Ya quisiera verlos a ellos, despellejados vivos, y vueltos a curar para repertirles el tormento ( sin embargo, mis deseos no son tema de este post ). Hay un site para juntar firmas para solicitar al ministro de Canada, detenga esta innecesaria muestra de barbarie. Mira que para que estes abrigado no hace falta despellajar a nadie, existen otros medios.







January 8, 2006






Nuevos aires en PHP-es

Filed under: PHP

Despues de un largo tiempo de letargo en PHP-es, tiempo durante el cual ya no se llevaron a cabo las ya acostumbradas charlas tecnicas, hemos entrado a una etapa de reconstruccion empezando obivamente por el web site. Hemos dejado el metodo colaborativo del wiki, mas que nada x la sencilla razon que no colaboraban :P . Ahora estamos usando al gekko. Obviamente a empezado una casa de bugs alucinante ( o features mal entendidos :P ).

Ojala dentro de poco retomemos las charlas tecnicas, sobre todo para ayudar a los noveles y a los viejos refrescar conocimientos :D

PD: Si alguien desea colaborar con tutorials o manuale, me los pueden mandar para subirlos al site. (necudeco into gmail punto com)

December 13, 2005






FrameWork o CMS?

Buscas un nuevo proyecto?, no sabes que hacer en tus ratos de ocio?, te interesa aprender php pero de verdad? o simplemente quieres poner tus fotos en intenet. Cualquier excusa es buena para introducirse al mundo de gekko!. Este proyecto (relativamente nuevo) desarrollador por xiam ( cuando no Mexico haciendo cosas :P ) busca ser no solo un gestor de contenidos mas, sino que en base a una adecuada modularizacion del sistema, permitirnos tener un Framework de desarrollo para aplicaciones web en php.

El proyecto es bastante joven, aunque no por eso se encuentra en pañales P, asi que buscabas un sitio donde tu codigo se pudiera hacer notar, este proyecto es para ti. Y si eres un artista de los templates, o te gusta jugar con el gimp, aca podes dar rienda suelta a tu creatividad creando y aportando con tu trabajo.

No dejes pasar la oportunidad que tu nombre este en los creditos de este prometedor proyecto. Unete al equipo de Gekko.

PD: Si no te animas a instalarlo y aun asi te pico el bicho de la curiosidad, date una vuelta por el site de prueba






















Get free blog up and running in minutes with Blogsome
Theme designed by B A Khan