jueves, 26 de noviembre de 2009

Métodos mágicos II – PHP 5 Orientado a objetos

En esta segunda entrega de los métodos mágicos de PHP os voy a comentar dos nuevos métodos que se han agregado a la versión 5 de PHP para trabajar con clases.

Los métodos de los que os voy a hablar son el __clone(), un método que sería el equivalente al constructor de copia de la Programación orientada a objetos de toda la vida, y el __get() y __set().

Empecemos por el __clone(). Este método realiza las funciones del constructor de copia de toda la vida. Hace una copia exacta del objeto. Si nuestro objeto tiene referencias a otros objetos también los copia.

Por otro lado, todos los que hemos programado orientado a objetos tenemos claro el tema del ámbito de los atributos y métodos. Sabemos que si el atributo es privado sólo se puede acceder a él desde dentro de la clase y desde fuera solo se puede acceder a su información a través de los métodos accesores y selectores (get y set).

Los métodos __get() y __set() nos lo ponen bien fácil. Si no existieran estos métodos genéricos, deberíamos definir un get y un set para cada uno de los atributos.

Aquí tenéis un ejemplo de como se programarían estos métodos:

class Rectangulo{
private $ancho;
private $alto;

function __clone(){
$this->ancho = clone $this->ancho;
$this->alto = clone $this->alto;
}

function __get($value){
return $this->$value;
}

function __set($value, $param){
if(is_numeric($param)){
$this->$value = $param;
}
}
}


Escuchando... Rod Stewart and the faces -- Maggie May
[kml_flashembed movie="http://www.youtube.com/v/xikQ0c5KdZE" width="425" height="350" wmode="transparent" /]

martes, 17 de noviembre de 2009

Métodos mágicos I - PHP 5 Orientado a objetos

Hola amigos ya estoy por aquí de nuevo. En esta ocasión y dado que estoy metido en unos asuntos en este momento que tratan sobre la programación orientada a objetos en php, os voy a comentar una serie de métodos llamados mágicos que se han introducido en la versión 5 de php.

A partir de la versión 5 de php se han introducido mejoras que facilitan la encapsulación de los objetos y así lo aproximan más a la POO.

Lo primero que cabe destacar es que tanto los métodos como los atributos pueden ser de tres tipos.

private: Sólo son accesibles los métodos de la clase.

protected: Sólo son accesibles desde los métodos de la clase y de clases derivadas.

public: Se pueden acceder a ellos desde fuera de los métodos de la clase.

El primer método "mágico" que voy a explicar es el constructor. En php 4 por convención se solía usar como constructor un método que tenía el mismo nombre que la clase. PHP 5 nos introduce el método __construct(), aquí tenéis un ejemplo.

<?php
class Rectangulo{
private $ancho;
private $largo;
function __construct($pAncho, $pLargo){
$this->ancho = $pAncho;
$this->largo = $pLargo;
}
}
?>


El siguiente método que voy a explicar es __toString(). Gracias a este método podemos sacar por pantalla un objeto como si fuera un string.

Vamos a ver un ejemplo.

function __toString(){
$retorno = 'Las dimensiones del rect&aacute;ngulo son:
(
'.$this->ancho.' x '.$this->largo.')<br />';
$retorno.= 'El &Aacute;rea es: '. $this->ancho * $this->largo;
return $retorno;
}


La llamada a estos métodos sería:

$rect = new Rectangulo (10,10);
echo $rect;






Escuchando ... Colorblind -- Counting Crows
[kml_flashembed movie="http://www.youtube.com/v/y0s7ycdUcHk" width="425" height="350" wmode="transparent" /]

lunes, 9 de noviembre de 2009

¿Cómo actualizar una página al cambiar el valor de un combo box? (Ajax)

Hola amigos, en esta ocasión voy a explicar algo que existe en casi todas las páginas, pero en este caso yo lo he aplicado con AJAX y JQUERY.

¿En cuántas páginas habéis entrado y habéis visto un desplegable de estos (combo box) con una serie de valores y habéis seleccionado uno de ellos y la página automáticamente se ha recargado y os ha mostrado unos valores?

[caption id="attachment_154" align="aligncenter" width="315" caption="Un combo box "]Un combo box [/caption]

Como siempre que trabajamos con AJAX tendremos la siguiente estructura:

[caption id="attachment_156" align="aligncenter" width="475" caption="Diagrama de funcionamiento AJAX"]Diagrama de funcionamiento AJAX[/caption]

El fichero HTML en el que vamos a añadir este combo tendría este código:

index.html

<html>
<head>
<script src='js/jquery.js' type='text/javascript'></script>
<script src='js/funciones.js' type='text/javascript'></script>
</head>
<body>
<select name = "seleccionar">
<option value ="1">1</option>
<option value ="2">2</option>
<option value ="3">3</option>
<option value ="4">4</option>
<option value ="5">5</option>
</select>
<div id = "contenido"></div>
 </body>
</html>


En el fichero Javascript:

funciones.js

$(document).ready(function () {

$('#limite').change(function(){
$.get("funcionesC.php",
{limite: $('#limite').val()
}, function(data){
$('#c').html(data);
});
});
});


Por último en el fichero PHP desde el que mediante el echo devolvemos el callback deberemos escribir lo siguiente:

funcionesC.php

$limite = $_GET['limite'];
echo $limite;


Por último, como siempre una canción para despedir el post.
Escuchando... I wanna be your boyfriend -- The Ramones


jueves, 5 de noviembre de 2009

$_REQUEST, $_POST o $_GET

Hola amigos, tras un largo tiempo sin escribir me dispongo a compartir ciertas experiencias con vosotros.

En el mundo del envío y recepción de datos existen una serie de normas no escritas sobre qué método usar.

Para empezar haré una breve descripción sobre los métodos de envío y recepción de datos. Como bien sabréis necesitaremos un formulario HTML para enviar los datos. En la etiqueta <form> será dónde definiremos la propiedad method que podrá tener los siguientes valores:

  • post: Envía ocultos los datos

  • get: Envía los datos en la URL


Bien además de saber estas pequeñas diferencias es básico recordar que todo lo que hagamos en la red estará sujeto a posibles ataques, por lo tanto considero fundamental diferenciar en qué tipo de operaciones podemos usar get y post.

Post:

  1. Para las operaciones de modificación de registros de una Base de datos (Insert, Delete y Update) .

  2. Para formularios de Login.

  3. etc.


Get:

  1. Consultas  (Select)

  2. etc.


Por otro lado tenemos la opción Request. Esta opción es sin duda la más interesante cuando tenemos que recojer datos de otras páginas en las que no sabemos cuál es el método de envío.

En definitiva Request no necesita saber de que manera se envian los datos. El hecho de usar Request puede provocar vulnerabilidades y fallos de seguridad.

A continuación os voy a poner un ejemplo de cada:




GET



formulario.html

<form action="procesar.php" method="get">
<input name="variable" type="text"/>
<input type="submit" value="enviar"/>
</form>


procesar.php

<?php
$var = $_GET['variable1']
;
echo $var;
?>



POST



formulario.html

<form action="procesar.php" method="post">
<input name="variable" type="text"/>
<input type="submit" value="enviar"/>
</form>


procesar.php

<?php
$var = $_POST['variable1']
;
echo $var;
?>



REQUEST



formulario.html

<form action="procesar.php" method="post">
<input name="variable" type="text"/>
<input type="submit" value="enviar"/>
</form>



<form action="procesar.php" method="get">
<input name="variable" type="text"/>
<input type="submit" value="enviar"/>
</form>



procesar.php

<?php
$var = $_REQUEST['variable1']
;
echo $var;
?>


Escuchando...   Angelic Upstarts - Solidarity

[kml_flashembed movie="http://www.youtube.com/v/1rJfv0zVnwU" width="425" height="350" wmode="transparent" /]