Esta fue mi primera contribución en el frame de cakephp, en la cual me di cuenta de un bug, que existía en el modelo del nucleo.

El problema ¿que estaba pasando?

Tratare de explicar dicha contribución, verán hace un tiempo el cakephp en su modelo base tenia la siguiente instrucción en php:

if ($this->actsAs !== null || $this->actsAs !== false) {
 //...
}

Una prueba haciendo una pequeña prueba

Sí analizamos un poco nos daremos cuenta que es un análisis lógico incorrecto, por lo cual me puse en contacto con uno de los desarrolladores enviando el siguiente test:

function foo($actsAs){
    if ($actsAs !== null || $actsAs !== false) {
                echo "always runs!\n";
    }else
        var_dump($actsAs);
}

foo(false);
foo(null);
foo(
    array('Translate', 'MyBehavior' => array('setting1' => 'value1'))
);
foo('other mensaje');

Verán definí la función foo la cual es simplemente una función de prueba para testar la instrucción lógica de la forma: if ($this->actsAs !== null || $this->actsAs !== false), el resultado del script es el siguiente:

always runs!
always runs!
always runs!
always runs!

¿Como se resolvió? y ¿tu que solución darías?

Bien basicamente propuse las siguientes 3 soluciones:

1. Cambiar la estructura de la comparación lógica por la siguiente

    if ($this->actsAs !== null && $this->actsAs !== false)

2. Revisar si $this->actsAs no es vacio

    if (!empty($this->actsAs))

3.Eliminar la comparación y simplemente ejecutar la acción defecto

    $merge = array('findMethods','actsAs');
    /*if ($this->actsAs !== null || $this->actsAs !== false) {
            $merge[] = 'actsAs';
    }*/

 

¿Tu cual crees que es la mejor solución?, para mayor información sobre la solicitud de cambios puede ver los detalles en:

https://github.com/cakephp/cakephp/pull/357

 

P.d. Agradezco a la comunidad de cakePHP y en especial a Markstory por portarse tan amables con un novato que apenas hacia su 1ra confirmación.

Fitorec

Me gusta la programación, me fascina el software libre, mis lenguajes preferidos son PHP, JavaScript, Python y Bash (aunque me gusta programar en casi cualquier lenguaje), en sistemas operativos me gusta GNU/Linux.

Más Entradas - Website

Sígueme:
TwitterGoogle PlusYouTubeDelicious

Sin Comentarios

Puedes ser el primero en comentar.

Deja un comentario

Por favor, introduzca su nombre. Please enter an valid email address. Por favor, introduzca un mensaje.