Programar en Linux
Franco Catrin
fcatrin en tuxpan.com
Vie Oct 20 15:13:23 CLST 2006
El vie, 20-10-2006 a las 13:00 -0300, Ricardo Mun~oz A. escribió:
> Franco Catrin wrote:
> > Las pruebas son radicalmente distintas. En el caso de un lenguaje
> > decente, las pruebas son enfocadas en cosas funcionales, ver si la
> > aplicación hace lo que tiene que hacer.
> >
> > .... en PHP _además_ hay que probar si el _lenguaje_ hace lo que tu
> > necesitas que haga ....
> >
>
> tienes algun ejemplo concreto?? (para entender a que te refieres)
Puede ser algo tan simple como esto:
$variable = 400;
echo $varable + 1;
y no, no hay que ser newbie para cometer un error asi, es muy facil que
ocurra. Entonces el foco no está en resolver el problema, sino en
además evitar que se te pasen errores como ese.
La unica forma de asegurarse de que no tengas errores de ese tipo es
haciendo pruebas de cosas que no son funcionales!!
Otro ejemplo menos trivial, donde tampoco te ayuda el lenguaje
class Object {
var $title;
function setTitle($title) {
$this->title = $title;
}
function display(){
echo $this->title;
}
}
function createInstance() {
global $global;
$local = new Object();
$local->setTitle("uno");
$global = &$local;
}
$global = new Object();
$global->setTitle("cero");
$global->display();
createInstance();
$global->display();
En este caso $global no tendrá acceso al objeto creado dentro de la
funcion, curiosamente queda apuntando al objeto inicial, el que dice
cero. Si cambio $global = "aaa" y despues hago echo $global desde
fuera, si toma el objeto que estaba dentro de la funcion (seguramente lo
copia). Pero lo que yo necesito es la referencia al objeto. Por
ejemplo para que punteros a ese objeto sigan siendo validos, entonces no
sirve la copia.
Otro accidente que puede ocurrir aca y que el lenguaje no va a hacer
nada por mi, es que dentro del metodo display omita $this->, ya que
estoy dentro del scope de la clase, pero para php es $title se convierte
en una variable nueva
Tampoco tienes un manejo seguro de excepciones, obligar al programador
que se haga cargo de ejecutar código en donde puede ocurrir una
excepcion, y darle oportunidad de hacer una limpieza posterior (como lo
bloques try/catch/finally de C# y Java)
... y estos problemas son la punta del iceberg
--
Franco Catrin L. TUXPAN
http://www.tuxpan.com/fcatrin
Más información sobre la lista de distribución Linux