1
resposta

Warning: Undefined array key 1

Mesmo o meu código estando exatamente igual ao do professor está aparecendo esse warning. Me expliquem o que pode ser..

<?php

namespace Alura;

class Usuario
{
    private $nome;
    private $sobrenome;

    public function __construct(string $nome) {

        $nomeSobrenome = explode(" ", $nome, 2);

        if ($nomeSobrenome[0] === "") {
            $this->nome = "Nome inválido";
        } else {
            $this->nome =  $nomeSobrenome[0];
        }

        if ($nomeSobrenome[1] === null) {
            $this->sobrenome = "Sobrenome inválido";
        } else {
            $this->sobrenome = $nomeSobrenome[1];
        }
    }

    public function getNome(): string
    {
        return $this->nome;
    }

    public function getSobrenome(): string
    {
        return $this->sobrenome;
    }
}
<?php

use Alura\Usuario;

    require 'Usuario.php';
    $usuario = new \Alura\Usuario($_POST['nome']);
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="bootstrap.min.css">
    <title>Curso Strings</title>
</head>
<body>

<div class="mx-5 my-5">
<h1>Cadastro feito com sucesso.</h1>
<p>Seguem os dados de sua conta:</p>
<ul class="list-group">
    <li class="list-group-item">Primeiro nome: <?php echo $usuario->getNome() ?></li>
    <li class="list-group-item">Sobrenome: <?php echo $usuario->getSobrenome() ?> </li>
    <li class="list-group-item">Usuário: </li>
    <li class="list-group-item">Senha: </li>
    <li class="list-group-item">Telefone: </li>
    <li class="list-group-item">Email: </li>
    <li class="list-group-item">Endereço: </li>
</ul>
</div>
</body>
</html>

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Está correto, ele está te mostrando que a string[1] não foi definida, que é o que gera o Sobrenome Inválido. É apenas um alerta de erro padrão do PHP que não aparecia na epoca que o curso foi gravado.

Uma solução para retirar a mensagem é a seguinte:

if (isset($nomeSobrenome[1]) == null) {
            $this->sobrenome = "Sobrenome inválido";
        } else {
            $this->sobrenome = $nomeSobrenome[1]; // Pegando indice 1 (sobrenome).
        } 

Feito isso, o isset() vai ser chamado para verificar se o valor é igual a null, assim como está na documentação do PHP:

  • isset() will return false when checking a variable that has been assigned to null.