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