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.

¿Cómo se coloca un tipo de dato como sugerencia para un parámetro de una función en PHP?

Tengo un problema al obtener el tipo de retorno para esta función ya que tengo tipos mixtos en el switch. He utilizado mixed y explotó. He utilizado string|bool y varios tipos para el tipo de unión.

* @param  $value 
* @param  string $type

public function __construct(string $type, $value)
{
$this->type = $type;
$this->value = $value;
}


He intentado todo, pero no pasó el pipeline de CI/CD (AWS)

public function getValue(bool $typed = false)
{
if (false === $typed) {
return $this->value;
}

    switch ($this->type) {
    case 'boolean':
        return (bool) $this->value;
    case 'datetime':
        if (empty($this->value)) {
            return null;
        }

        return new \DateTime($this->value);
    case 'option_tags':
        return json_decode($this->value);
    default:
        return $this->value;
}

}


ERROR
Los siguientes son los errores
Method App\Model\Resources::getValue() has no return typehint specified.
Parameter #1 $time of class DateTime constructor expects string, string|true given.
Parameter #1 $json of function json_decode expects string, bool|string given.
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver el problema de tipos mixtos en la declaración switch, puedes usar un tipo de unión con tipos específicos para cada caso. En lugar de usar mixed, puedes definir los posibles tipos de retorno para cada caso de la siguiente manera:

    public function getValue(bool $typed = false): mixed
    {
        // ...
        switch ($this->type) {
            case 'boolean':
                return (bool) $this->value;
            case 'datetime':
                if (empty($this->value)) {
                    return null;
                }
                return new \DateTime((string)$this->value); // convirtiendo a string
            case 'option_tags':
                return json_decode((string)$this->value); // convirtiendo a string
            default:
                return $this->value;
        }
    }
    

    Además, debes especificar los tipos de retorno para la función y el constructor.

    /**
     * @return mixed
     */
    public function getValue(bool $typed = false): mixed
    {
        // ...
    }
    
    /**
     * @param string $type
     * @param mixed $value
     */
    public function __construct(string $type, mixed $value)
    {
        // ...
    }
    

    Además, debes convertir $this->value a string en caso de que el valor de entrada no sea un string, ya que tanto DateTime como json_decode esperan un string como entrada.

Comments are closed.