es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PhpStorm: ¿Cuál es la mejor manera de manejar la advertencia “se espera que el valor de retorno sea…”?

Mi código PHP está estructurado de la siguiente manera (esta estructura no se puede cambiar):

class BaseFooClass {
}

class ChildFooClass1 extends BaseFooClass {
}

class ChildFooClass2 extends BaseFooClass {
}

// ... (hay como cien clases secundarias de Foo)

class BaseBarClass {
    protected function getFooBase($input) : BaseFooClass 
    {
        $class = "ChildFooClass" . $input;
        return new $class();
    }
}

class ChildBarClass1 extends BaseBarClass {
    public function getFoo() : ChildFooClass1 
    {
        return $this->getFooBase(1);
    }
}

Ahora, en la función getFoo() de ChildBarClass1, PhpStorm dará la advertencia “Se espera que el valor de retorno sea ‘ChildFooClass1’, se devolvió ‘BaseFooClass’ ” y lo hace de manera correcta.

Sin embargo, quiero un código limpio sin advertencias sin cambiar esta estructura.

Intenté lo siguiente agregando PHP doc:

public function getFoo() : ChildFooClass1 
{
    /** @var ChildFooClass1 $foo **/
    $foo = $this->getFooBase(1);
    return $foo;
}

Sin embargo, esta vez da una advertencia diferente “Variable local innecesaria” y me pide que lo vuelva a in-linear.

¿Existe una forma buena de deshacerse de las advertencias?

EDITAR: también se ha intentado lo siguiente pero aún se muestra la advertencia “Se espera que el valor de retorno sea …”.

/**
 * @return ChildFooClass1
 */
public function getFoo() : ChildFooClass1 
{
    return $this->getFooBase(1);
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en PHP, herencia, PhpStorm y PHPDoc, sugiero usar el siguiente comentario de PHPDoc para la función getFoo() en ChildBarClass1:

    /**
     * @return ChildFooClass1
     */
    public function getFoo() : ChildFooClass1
    {
        return $this->getFooBase(1);
    }
    

    Esto le permitirá a PhpStorm saber que se espera que getFoo() devuelva una instancia de ChildFooClass1 y suprimir la advertencia sobre el valor de retorno. Sin embargo, es importante tener en cuenta que esto no cambiará el valor de retorno real de la función, así que asegúrese de que realmente esté devolviendo una instancia de ChildFooClass1, tal como se espera.

Comments are closed.