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 14, 2007






Configuracion de Hosts Virtuales en Apache2

Filed under: Linux, Articulo, Web

Cuando montamos un servidor web muchas veces queremos alojar mas de una pagina. Estar usando:

http://miservidor.com/itsn
http://miservidor.com/asociacion


no es muy cool. En este caso tenemos dos opciones, montar cada pagina web en su propio servidor :S ( no lo creo ), y usar los virtual Host.

Por ejemplo vamos a configurar 3 virtual host dentro de un solo apache:

NameVirtualHost *:80      # Indica que se atenderan las peticiones para HostVirtuales de cualquier direccion en el puerto 80
NameVirtualHost *:443    # Lo mismo solo que tambien activamos el puerto 443, el cual nos sirve para https

<VirtualHost *:80>
    DocumentRoot   /var/www/pagina1      # Le indica donde esta almacenado el sitio web
    ServerName      first.miservidor.com   # Le indica como se llamara a esa pagina

</VirtualHost>

<VirtualHost *:80>
    DocumentRoot   /var/www/pagina2      # Le indica donde esta almacenado el sitio web
    ServerName      second.miservidor.com   # Le indica como se llamara a esa pagina

</VirtualHost>

<VirtualHost *:443>
    DocumentRoot   /var/www/secure      # Le indica donde esta almacenado el sitio web seguro
    ServerName      secure.miservidor.com   # Le indica como se llamara a esa pagina.
    SSLEngine On                                         
    SSLCertificateFile /etc/apache2/ssl/apache.pem  # Le indica donde se guardo el certificado para el apache
</VirtualHost>


Para asegurarnos que nuestro servidor escuche en el puerto 80 y 443 editamos el archivo /etc/apache/ports.conf

Listen *:80
Listen *:443

ahora solo nos falta generar el certificado para apache, y habilitar el ssl ( Protocolo Seguro )

Para generar el certificado para el apache usamos el siguiente comando

sudo apache2-ssl-certifcate


El sistema te pedira una serie de datos, como Pais, Region, Ciudad, Nombre de Empresa, etc. Para que todo funcione bien es conveniente que contestes todas las preguntas.

Ahora habilitamos el ssl con la siguiente orden:

sudo a2enmod ssl

Technorati Tags: apache, web, linux virtual host, ssl

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 28, 2007






Problemas con div

Filed under: Programacion, Web

Hoy estuve creando una pantalla en xHTML. a grandes rasgos necesitaba un menu izq de altura fija y un contenido a la derecha de altura variable.

Para lograrlo hice (he incluido los styles dentro de los mismos tags solo para efectos ilustrativos):

<div id="_Container">
    <div id="_Menu" style="float:left">
       ….
    </div>
    <div id="_Content" style="margin-left:180px;">
       ….
    </div>
</div>

el resultado era el correcto, excepto cuando el bloque _Content era de menor tamaño que el bloque _Menu

Para solucionarlo, era necesario incluir otro div más al final del div#_Container de la siguiente manera:

<div id="_Container">
    <div id="_Menu" style="float:left">
       ….
    </div>
    <div id="_Content" style="margin-left:180px;">
       ….
    </div>

    <div style="clear:both;">
    </div>
</div>

El ultimo div contiene el estilo clear:both. Con esto el div _Container se expande lo necesario para incluir el div#_Menu.

powered by performancing firefox

January 26, 2007






Cool Web

Filed under: Linux, Humor, Personal, Web

Una pagina web muy cool.

Definitivamente el diseñador de este site, le importa muy poco el que diran !! :P

powered by performancing firefox






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






















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