Получить доступ к атрибутам частный класс внутри другого класса


я Начал изучать PHPOO и у меня возникли трудности знаешь, для доступа к атрибутам класса Pessoa, которые являются частными в классе Login, выполняется следующий код

Class Person

class Pessoa {
    private $nome;
    private $idade;

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

    public function setNome($n){
        $this->nome = $n;
    }

    public function getIdade(){
        return $this->idade;
    }

    public function setIdade($i){
        $this->idade = $i;
    }

    public function dados_nome() {
        $this->nome = "Fulano de Tal";
        $this->setNome($this->nome);
        //echo ''.$this->nome.' '.$this->sobrenome.' de '.$this->idade.' está online.';
    }

    public function dados_idade() {
        $this->idade = 21;
        $this->setIdade($this->idade);
    }
}

" Class Login

class Login {
    public $email;
    public $pass;

    public function logar() {
        $this->email = "[email protected]";
        $this->pass = "123456";

        if ($this->email == "[email protected]" and $this->pass == "123456") :
            $dados = new Pessoa;
            $dados->dados_nome();
            $dados->dados_idade();
            echo "Bem vindo ".$dados->nome." de ".$dados->idade." anos.";
        else :
            echo "Dados incorretos.";
        endif;
    }
}

Fatal error: Uncaught Error: Cannot access private property Лица::$name in C:\xampp\htdocs\testes\class.php:47 Stack trace: #0 C:\xampp\htdocs\testes\index.php(12): Login->войти() #1 {main} throw in C:\xampp\htdocs\testes\class.php on line 47

Author: Maniero, 2019-02-16

2 answers

Объявлении атрибута, как private не может получить к нему доступ непосредственно из другого класса. Вы просто сможете получить доступ к этому атрибуту опосредованно, через метод. В примере выше, чтобы получить доступ к атрибутам имя и возраст, необходимо создать экземпляр класса Человек, как пример ниже:

Pessoa $p = new Pessoa();
$p.getNome(); // acessa-se indiretamente o atributo nome
$p.getIdade(); // acessa-se indiretamente o atributo idade
 2
Author: Lucas Augusto Coelho Lopes, 2019-02-21 20:03:23

Цель быть лишен именно не мог получить (помощь в корпусе), то это еще хорошо, что с трудом. Одной из целей наведения на объект, чтобы скрыть детали реализации, и один из способов сделать это-оставить частных членов, если вы пытаетесь получить доступ, что является частным, или хотите сделать нечто, что не может или не должно быть частным, тогда вы должны решить, как исправить.

Я даже не буду пытаться утверждать, что это правильно, потому, что почти код с ООП, что я вижу, особенно на PHP, работает неправильно, то решение сделать все заново или не делать ООП, в конце концов, почти никто не делает правильно, и там вреде использовать эту технику и не получает преимущества, которые может принести, если бы уверен, что в том числе и большинство людей не может сказать, что реальную пользу, она должна была сделать иначе.

Но в данном случае это только кажется, что должен использовать метод добытчика имя и возраст доступ поле. В том числе потому, что в комментарии, кажется, считают, что звонит методы и не находится.

Ошибки, которые совершают люди, заключается в вызове атрибутов, что на самом деле является полем.

Другой распространенной ошибкой является злоупотребление getter) и setters, ООП самом деле ненавидит. Впечатление, что придает то, что не хотел бы использовать их же, но сделал это, потому что видел где-то кто-то делает это. Класс имеет методы немного лучше, несмотря на то, что имена хорошо и что плохо также ничего не делает, очень полезно и, может быть, даже неправильно.

, Но самая серьезная ошибка-это разработки неверная классов и создать вещи, которые не имеют смысла и не помогают код лучше.

 7
Author: Maniero, 2020-08-28 14:24:05