2
respostas

Solucao de contrutor caso exista mais de 2 divisoes de explode

No curso é passado o uso de explode dividindo uma string apenas em 2 partes, No caso estava usando meu nome como teste e meu nome geraria 4 partes

Pensei nesse codigo para solucao da classe caso exista mais de 2 divisoes no array de sobra do comando de explode :

<?php

namespace Cadastro;

class usuario
{

    private $nome;
    private $sobrenome;

    public function __construct(string $nome)
    {
    $nomesobrenome = explode(" ", $nome);
    $this->nome = $nomesobrenome[0]; // O primeiro indice do array $nomesobrenome sempre vai cair em $this->nome
    if (isset($nomesobrenome[1])){
        $this->nome .= ' ' . $nomesobrenome[1]; //O segundo indice SE existir vai cair tambem em $this->nome
    } else {
        $this->nome;
    } 
    for ($i = 2; $i < count($nomesobrenome); $i++){
        $this->sobrenome .= ' ' . $nomesobrenome[$i];//A partir do segundo indice todos os os indices existentes vão para $this->sobrenome
    }


    }

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

    public function getSobrenome()
    {
        return $this->sobrenome;
    }


}

Gostaria de saber opiniões sobre essa solucao que bolei. Estou comecando agora em programacao e ter opinao sobre o que estou pensando.

2 respostas

Deixa aqui tambem a primeira solucao que tinha achado porem não senti que o codigo ficou limpo:

$nomesobrenome = explode(" ", $nome, 4);  
        if (isset($nomesobrenome[0]) && isset($nomesobrenome[1]))
        {
            $this->nome = $nomesobrenome[0] . ' ' . $nomesobrenome[1];
        } else {
            $this->nome = "Erro detectado";
        }

        if (isset($nomesobrenome[2]) && isset($nomesobrenome[3])){     
            $this->sobrenome = $nomesobrenome[2] . ' ' . $nomesobrenome[3];
        } else {
            $this->sobrenome = "Erro detectado";
        }

Olá, Henrique. Tudo bem?

Gostaria de pedir desculpas pela demora em responder o seu tópico.

Parabéns pela sua resolução ficou bem legal, é visto o quanto você se aprofundou nas funcionalidades do PHP e isso é muito interessante.

Eu também tentei implementar uma solução para essa problemática, e eu consegui da seguinte maneira:

<?php


$nomeCompleto = "Henrique César Cabral Pereira";


$nomeDivido = explode(" ", $nomeCompleto);
$nome = $nomeDivido[0];
unset($nomeDivido[0]);
$sobrenome = implode(" ", $nomeDivido);

echo "Meu nome é $nome" . PHP_EOL;
echo "Meu sobrenome é $sobrenome" .PHP_EOL;

Veja que eu utilizei o método do PHP implode() para juntar a string novamente. Tenta fazer desse jeito também para treinar :)

Bons estudos!