because my class only returns NULL

Asked

Viewed 304 times

-2

people, where’s the problem? instantiating directly the classes validaNome and validaSobrenome they work, now in class msgContato they return NULL, where I’m going wrong?

validationName

class validaNome {

    public $ico_warning, $ico_success;

    public function setNome($nome) {

        if (empty($nome)) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome está vazio.</b>';
        elseif (strlen($nome) < 3) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome tem que ter mais de 3 caracteres.</b>';
        elseif (strlen($nome) > 25) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome no maximo 25 caracteres.</b>';
        else :
            return $nome;
        endif;

    }

}

validationSobrenome

class validaSobrenome {

    public $ico_warning, $ico_success;

    public function setSobrenome($sobrenome) {

        if (empty($sobrenome)) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome está vazio.</b>';
        elseif (strlen($sobrenome) < 3) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome tem que ter mais de 3 caracteres.</b>';
        elseif (strlen($sobrenome) > 25) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome no maximo 25 caracteres.</b>';
        else :
            return $sobrenome;
        endif;

    }

}

msgContact

class msgContato {

    private $v_nome, $p_nome, $v_sobrenome, $p_sobrenome, $v_email, $p_email, $v_assunto, $p_assunto, $v_mensagem, $p_mensagem, $crud;

    public function getContato($nome, $sobrenome) {

        $this->v_nome = new validaNome;
        $this->v_sobrenome = new validaSobrenome;

        $this->v_nome->setNome(''.$nome.'');
        $this->v_sobrenome->setSobrenome(''.$sobrenome.'');

    }

}

$a = new msgContato;
var_dump($a->getContato('aaaaaaaa', 'aaaaaaaaaaaaaa'));
  • 3

    Your code is wrong everywhere.

  • @Virgilionovic as well?

  • 2

    Methods do not do what you expect not to have Return etc. What you intend to do?

  • @Virgilionovic apologizes for the delay, I ran out of internet, so that would be a simple validation for a contact form

  • 2

    See the return of @Augusto Vasques, your class is not NULL. Another thing, it’s confusing and very strange the way you structured your classes for a simple validation.You created 2 classes for 2 validations, why not just create one class ? Better, why not put the validations only in the assignment methods of $v_nome and $v_sobrenome if this is really all you want to validate ? There are N ways to do what you want, restructure everything that will be better.

5 answers

5

Your question is:

Because my class only returns NULL?

Its class does not return null. Who returns null is the method getContato($nome, $sobrenome) class msgContato

Let the evidence:

Declared the same classes you used in your question:

class validaNome {

    public $ico_warning, $ico_success;

    public function setNome($nome) {

        if (empty($nome)) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome está vazio.</b>';
        elseif (strlen($nome) < 3) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome tem que ter mais de 3 caracteres.</b>';
        elseif (strlen($nome) > 25) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome no maximo 25 caracteres.</b>';
        else :
            return $nome;
        endif;

    }

}

class validaSobrenome {

    public $ico_warning, $ico_success;

    public function setSobrenome($sobrenome) {

        if (empty($sobrenome)) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome está vazio.</b>';
        elseif (strlen($sobrenome) < 3) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome tem que ter mais de 3 caracteres.</b>';
        elseif (strlen($sobrenome) > 25) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome no maximo 25 caracteres.</b>';
        else :
            return $sobrenome;
        endif;

    }

}

class msgContato {

    private $v_nome, $p_nome, $v_sobrenome, $p_sobrenome, $v_email, $p_email, $v_assunto, $p_assunto, $v_mensagem, $p_mensagem, $crud;

    public function getContato($nome, $sobrenome) {

        $this->v_nome = new validaNome;
        $this->v_sobrenome = new validaSobrenome;

        $this->v_nome->setNome(''.$nome.'');
        $this->v_sobrenome->setSobrenome(''.$sobrenome.'');

          
    }

}

Let’s create a class instance msgContato:

$Contato = new msgContato;

Now let’s dump the instance $Contato:

var_dump($Contato);

Which will result in:

object(msgContato)#1 (11) {
  ["v_nome":"msgContato":private]=>
  NULL
  ["p_nome":"msgContato":private]=>
  NULL
  ["v_sobrenome":"msgContato":private]=>
  NULL
  ["p_sobrenome":"msgContato":private]=>
  NULL
  ["v_email":"msgContato":private]=>
  NULL
  ["p_email":"msgContato":private]=>
  NULL
  ["v_assunto":"msgContato":private]=>
  NULL
  ["p_assunto":"msgContato":private]=>
  NULL
  ["v_mensagem":"msgContato":private]=>
  NULL
  ["p_mensagem":"msgContato":private]=>
  NULL
  ["crud":"msgContato":private]=>
  NULL
}

Which means your class is not null.

Now if we dump the method getContato($nome, $sobrenome):

var_dump($Contato->getContato("Stack", "Oveflow"));

The proceeds will be:

NULL

For the method getContato($nome, $sobrenome) has no return value.

To change this behavior modify the method getContato($nome, $sobrenome) adding the keyword return plus a value to be returned:

    public function getContato($nome, $sobrenome) {

        $this->v_nome = new validaNome;
        $this->v_sobrenome = new validaSobrenome;

        $this->v_nome->setNome(''.$nome.'');
        $this->v_sobrenome->setSobrenome(''.$sobrenome.'');

        //Essa função retornava NULL, agora retornará a própria instancia
        return $this;

    }

Whose dump will be:

object(msgContato)#1 (11) {
  ["v_nome":"msgContato":private]=>
  object(validaNome)#2 (2) {
    ["ico_warning"]=>
    NULL
    ["ico_success"]=>
    NULL
  }
  ["p_nome":"msgContato":private]=>
  NULL
  ["v_sobrenome":"msgContato":private]=>
  object(validaSobrenome)#3 (2) {
    ["ico_warning"]=>
    NULL
    ["ico_success"]=>
    NULL
  }
  ["p_sobrenome":"msgContato":private]=>
  NULL
  ["v_email":"msgContato":private]=>
  NULL
  ["p_email":"msgContato":private]=>
  NULL
  ["v_assunto":"msgContato":private]=>
  NULL
  ["p_assunto":"msgContato":private]=>
  NULL
  ["v_mensagem":"msgContato":private]=>
  NULL
  ["p_mensagem":"msgContato":private]=>
  NULL
  ["crud":"msgContato":private]=>
  NULL
}

5


Well, as I mentioned in your question, it’s very strange the way you structured your classes.

Referring to your question, you are giving a var_dumpin $a->getContato('$a->getContato('aaaaaaaa', 'aaaaaaaaaaaaaa')); and it makes no sense because nothing is returned in this method.

As already said by @Augusto Vasques you would have to return something or even give the var_dump after calling the getContato().

Even so it’s still confused, I suggest you restructure your classes, there are N ways to do what you want, I’ll leave an example below.

<?php     
    class msgContato {

        private $nomecompleto; 
        private $email;
        private $telefone;
        //...

        public function getContato($nome, $sobrenome) {

            $this->nomecompleto = new NomeCompleto();

            $this->nomecompleto->setNome(''.$nome.'');
            $this->nomecompleto->setSobrenome(''.$sobrenome.'');

            return $this;
        }
    }

    class NomeCompleto{
        private $nome;
        private $sobrenome;

        public function setNome($nome) {

            if (empty($nome)) :
                $this->nome = '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome está vazio.</b>';
            else if (strlen($nome) < 3) :
                $this->nome = '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome tem que ter mais de 3 caracteres.</b>';
            else if (strlen($nome) > 25) :
                $this->nome = '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome no maximo 25 caracteres.</b>';
            else :
                $this->nome = $nome;
            endif;
        }

        public function setSobrenome($sobrenome) {

            if (empty($sobrenome)) :
                $this->sobrenome = '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome está vazio.</b>';
            else if (strlen($sobrenome) < 3) :
                $this->sobrenome = '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome tem que ter mais de 3 caracteres.</b>';
            else if (strlen($sobrenome) > 25) :
                $this->sobrenome = '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome no maximo 25 caracteres.</b>';
            else :
                $this->sobrenome = $sobrenome;
            endif;

        }
    }

    $a = new msgContato();
    var_dump($a->getContato('aaaaaaaa', 'aaaaaaaaaaaaaa'));
?>

See the code working on ideone

I hope I’ve helped.

2

So your code doesn’t accept names like Ana, Eno, Lia and so on, due to the 3 characters, but come on.
Use this function instead of your own setName

function setNome($nome) {

    if (empty($nome)) {
     return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome está vazio.</b>';
    } else if (strlen($nome) <= 3) {
        return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome tem que ter mais de 3 caracteres.</b>';
    } elseif (strlen($nome) >= 26) {
        return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome no maximo 25 caracteres.</b>';
    }else {
        return $nome;
    }

}

Use this as your function setSobrenome

function setSobrenome($sobrenome) {

    if (empty($sobrenome)) {
        return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome está vazio.</b>';
    }elseif (strlen($sobrenome) <= 3) {
        return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome tem que ter mais de 3 caracteres.</b>';
    } elseif (strlen($sobrenome) >= 26) {
        return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Sobrenome no maximo 25 caracteres.</b>';
    }   else {
        return $sobrenome;
    }
}
  • I set 26 characters to be used up to 25 characters

2

You are calling the function getContato class msgContato and the function just arrow the names, has no return or any other action, so the expected is not returned even (or null).

Make the function do something, like return what was set, like this:

class msgContato {

    private $v_nome, $p_nome, $v_sobrenome, $p_sobrenome, $v_email, $p_email, $v_assunto, $p_assunto, $v_mensagem, $p_mensagem, $crud;

    public function getContato($nome, $sobrenome) {

        $this->v_nome = new validaNome;
        $this->v_sobrenome = new validaSobrenome;

        $retorno_nome = $this->v_nome->setNome(''.$nome.''); //recebe o retorno de setNome
        $retorno_sobrenome = $this->v_sobrenome->setSobrenome(''.$sobrenome.''); //recebe o retorno de setSobrenome

        //retorna o resultado obtido em setNome e setSobrenome
        return [
            "nome" => $retorno_nome,
            "sobrenome" => $retorno_sobrenome
        ];
    }
}

This way I wrote above, the function will return the name and surname that were passed

0

Your class validationName Does not treat names that have between 4 and 24 characters. Hence returns NULL

Your class validationSobrenome It does not treat surnames that have between 4 and 24 characters. Hence it returns NULL

try to return the value of the name with a final type Else like this:

class validaNome {

    public $ico_warning, $ico_success;

    public function setNome($nome) {

        if (empty($nome)) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome está vazio.</b>';
        elseif (strlen($nome) < 3) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome tem que ter mais de 3 caracteres.</b>';
        elseif (strlen($nome) > 25) :
            return '<b class="ico_msg error"><i class="fas fa-engine-warning"></i> Nome no maximo 25 caracteres.</b>';

        else:
             return $nome;

        endif;  

    }

}
  • nothing done, had ever put Else before and nothing, really can’t know why it returns NULL

Browser other questions tagged

You are not signed in. Login or sign up in order to post.