Programar en Linux

Ricardo Mun~oz A. rmunoz en pjud.cl
Vie Oct 20 17:31:48 CLST 2006


Franco Catrin wrote:
> 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.

hmm...

> 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.

leer documentacion -> 
http://cl.php.net/manual/es/language.references.arent.php

> 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.
>   

prueba con:

class Object
{
    var $title;
    var $text;

    function setTitle($title)
    {
        $this->title = $title;
    }

    function display()
    {
        echo "\ntitulo: ".$this->title;
        echo "\ntexto: ".$this->text;
    }

    function setText($text)
    {
       $this->text = $text;
    }

}

function createInstance()
{
    $local = new Object();
    $local->setTitle("uno");
    $local->setText("prueba...");

    $GLOBALS['global']=&$local;
}

$global = new Object();

$global->setTitle("cero");
$global->display();

createInstance();
$global->display();

> 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)
>   

actualizate, PHP5 si trae el manejo de excepciones -> 
http://cl.php.net/manual/es/language.exceptions.php

-- 
Ricardo Mun~oz A.
Usuario Linux #182825 (counter.li.org)


Más información sobre la lista de distribución Linux