jueves, 23 de agosto de 2007

Ultimamente he estado trabajando mucho con PHP, sobre todo para actualizarme a PHP 5 y avandonar la version 4, y es que el soporte de Programacion Orientado a Objetos que trae la nueva version digamos en pocas palabras es un poco mejor que la anterior, pero aun asi deja mucho que desear, hasta el momento he encontrado algunas pocas pero muy visibles diferencias, sobre todo porque trabajo con variables de session y en la version actual (5), se utilizan y se llaman de forma diferente a la version 4, y me causo unos ligeros problemas la creacion de objetos aqui va un ejemplo:

class main{ //DECLARAMOS UNA CLASE POR DEFECTO ES PUBLIC
var $var1="Hola Mundo"; //SE DECLARA UN VARIABLE GLOBAL DENTRO DE LA
CLASE

function main(){ //SE DECLARA UN METODO CONSTRUCTOR POR DEFECTO
PUBLIC

print $this->var1; // SE MANDA A IMPRIMIR UNA VARIABLE,
ESPECIFICANDO QUE ES
DE LA CLASE
}
function ejemplo($string){ // SE DECLARA UN METODO ORDINARIO
$string=htmlentities($string); //TRANSFORMAMOS LA CADENA A HTML
print $string; // SE IMPRIME UNA VARIABLE QUE ES RECIBIDA POR ARGUMENTO
}
}


La declaracion del objeto es de la siguente manera:

$obj1=new main(); //CREACION DEL OBJETO, ESPECIFICANDO SU NOMBRE CON LA
VARIABLE INSTANCIA
$obj1->ejemplo("Adios Mundo"); //SE UTILIZA EL OBJETO PARA PASAR UN
ARGUMENTO AL METODO ORDINARIO ejemplo();


Haciendo uso de este tipo de programacion se pueden realizar muchisimas cosas, y sobre todo con un toco de clase y elegancia para la organizacion del codigo, ya que en cierto momento la lectura eficiente del codigo se vuelve algo fundamental para el programador y para los colaboradores.

Aparte de lo comentado arriba, en esta nueva version es necesario especificar el metodo por el cual se ha introducido una variable global, utilizando los arrays $_GET[] y $_POST[], esta caracteristica sin duda ayuda en mucho la programacion de formularios en PHP ya que de esta forma se lleva un algoritmo mejor diseñado y con una implementacion mas especifica.


$obj1=new main();
if(!isset($_GET["id"])){
//NO SE HA INICIALIZADO LA VARIABLE id
header("Location:http://localhost/index.php");
}else{
//SE INICIALIZO LA VARIABLE id POR EL METODO GET
$obj1->ejemplo($_GET["id"]);
}

De esta forma se puede desarrollar un flujo del algoritmo que sea mas facil de seguir, especificando que metodo se ejecutara dependiendo de las variables que se inicialicen (isset()) o no se inicialicen (empty()), ejemplo:


<?php
$obj2=new postear();
switch($_GET["id"]){
case 'insertar':{
$obj2->insertar($_POST["name"],$_POST["post"]);
}
case 'mostrar':{
$obj2->mostrar();
}
default:{
$obj2->formulario();
}
}

class postear{
var $query;
function insertar($name,$post)
{
$this->conexion($name,$post);
if(isset($this->query)){ echo 'Datos insertados satisfactoriamente
<a href='.$PHP_SELF.'?id=mostrar>Mostrar</a>'; }
}
function mostrar()
{
mysql_connect("localhost","root","123456");
mysql_select_db("nombre");
$this->query=mysql_query("SELECT
* FROM tabla WHERE name!='NULL'");
echo 'Informacion:<br>';
while($datos=mysql_fetch_array($this->query)){
echo $datos["name"].'==='.$datos["post"].'
';
}
}
function formulario()
{
echo '
<form action='.$PHP_SELF.' method=post>
<input type=hidden name=id value=insertar>
<input type=text name=name>
<input type=text name=post>
<input type=submit value="hit it!!">
</form>
';
}
function conexion($name,$post){
mysql_connect("localhost","root","123456");
mysql_select_db("nombre");
$this->query=mysql_query("INSERT INTO tabla(name,post)
values('$name','$post')");
}
}
?>


Espero me haya dado a entender sobre este tipos de conceptos que estan muy de moda en un lenguaje tan popular como lo es PHP, y demostrar su facilidad de uso y flexibilidad ante el paradigma POO.

2 comentarios :

  1. Anónimo dijo...

    En el ultimo script hace falta un break en los case del switch, porque si no se los salta todos.. :P

    Muy bueno :)

  2. Miguel dijo...

    Muy buen apunte.. :P

    switch($_GET["id"]){
    case 'insertar':{
    $obj2->insertar($_POST["name"],$_POST["post"]);
    break;
    }
    case 'mostrar':{
    $obj2->mostrar();
    break;
    }
    default:{
    $obj2->formulario();
    }
    }