Получить доступ к атрибутам частный класс внутри другого класса
я Начал изучать 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
2 answers
Объявлении атрибута, как private не может получить к нему доступ непосредственно из другого класса. Вы просто сможете получить доступ к этому атрибуту опосредованно, через метод. В примере выше, чтобы получить доступ к атрибутам имя и возраст, необходимо создать экземпляр класса Человек, как пример ниже:
Pessoa $p = new Pessoa();
$p.getNome(); // acessa-se indiretamente o atributo nome
$p.getIdade(); // acessa-se indiretamente o atributo idade
Цель быть лишен именно не мог получить (помощь в корпусе), то это еще хорошо, что с трудом. Одной из целей наведения на объект, чтобы скрыть детали реализации, и один из способов сделать это-оставить частных членов, если вы пытаетесь получить доступ, что является частным, или хотите сделать нечто, что не может или не должно быть частным, тогда вы должны решить, как исправить.
Я даже не буду пытаться утверждать, что это правильно, потому, что почти код с ООП, что я вижу, особенно на PHP, работает неправильно, то решение сделать все заново или не делать ООП, в конце концов, почти никто не делает правильно, и там вреде использовать эту технику и не получает преимущества, которые может принести, если бы уверен, что в том числе и большинство людей не может сказать, что реальную пользу, она должна была сделать иначе.
Но в данном случае это только кажется, что должен использовать метод добытчика имя и возраст доступ поле. В том числе потому, что в комментарии, кажется, считают, что звонит методы и не находится.
Ошибки, которые совершают люди, заключается в вызове атрибутов, что на самом деле является полем.
Другой распространенной ошибкой является злоупотребление getter) и setters, ООП самом деле ненавидит. Впечатление, что придает то, что не хотел бы использовать их же, но сделал это, потому что видел где-то кто-то делает это. Класс имеет методы немного лучше, несмотря на то, что имена хорошо и что плохо также ничего не делает, очень полезно и, может быть, даже неправильно.
, Но самая серьезная ошибка-это разработки неверная классов и создать вещи, которые не имеют смысла и не помогают код лучше.