Tenho duas Classes uma Setor e a Outra Produto e Queria Pegar Todos os Atributos da Classe Setor pela Classe Produto pela Referência $setor mas não consigo. Alguém pode me ajudar?.
Classe Setor :
<?php
class Setor {
private $descricaoCat;
function getDescricaoCat() {
return $this->descricaoCat;
}
function setDescricaoCat($descricaoCat) {
$this->descricaoCat = $descricaoCat;
}
}
?>
Classe Produto:
<?php
class Produto {
private $descP;
private $qtdP;
private $unitarioP;
private $Setor; //Referência para Pegar Atributos e Metodos da Classe Setor.
function __construct() {
$this->Setor = new Setor();
}
function getDescP() {
return $this->descP;
}
function getQtdP() {
return $this->qtdP;
}
function getUnitarioP() {
return $this->unitarioP;
}
function getSetor() {
return $this->Setor;
}
function setDescP($descP) {
$this->descP = $descP;
}
function setQtdP($qtdP) {
$this->qtdP = $qtdP;
}
function setUnitarioP($unitarioP) {
$this->unitarioP = $unitarioP;
}
function setSetor($Setor) {
$this->Setor = $Setor;
}
}
Index.Php
<html>
<head>
<meta charset="UTF-8">
<title>Teste um Para Muitos:</title>
</head>
<body>
<?php
require_once 'modelo/Setor.php';
require_once 'modelo/Produto.php';
$setor = new Setor();
$setor->setCodigo(171);
$setor->setDescricaoCat("MASSAS");
$produto = new Produto();
$produto->setDescP("Coca-Cola Light 3L");
$produto->setQtdP(20);
$produto->setUnitarioP(5.89);
$produto->setSetor($setor);
echo "SETOR : " .$produto->getSetor()-> ?."<br>"; //AQUI ESTA O ERRO EU NÃO CONSIGO PEGAR O ATRIBUTO DA CLASSE SETOR PELA REFERENCIA $SETOR
echo "DESCRIÇÂO : ".$produto->getDescP()."<br>";
echo "QUANTIDADE : ".$produto->getQtdP()."<br>";
echo "UNITARIO : ".$produto->getUnitarioP();
?>
</body>
</html>
Dragon Tudo junto está funcionando no meu caso cada classe está numa pasta chamada modelo
que é chamada pelo require_once no index.php e ainda não esta funcionando!!!
Dragon se você ver o código que postei acima eu amostrei onde está o erro!!!
E nesta linha :
//AQUI ESTA O ERRO EU NÃO CONSIGO PEGAR O ATRIBUTO DA CLASSE SETOR PELA REFERENCIA $SETOR
echo "SETOR : " .$produto->getSetor()-> ?."<br>";
echo "DESCRIÇÂO : ".$produto->getDescP()."<br>";
echo "QUANTIDADE : ".$produto->getQtdP()."<br>";
echo "UNITARIO : ".$produto->getUnitarioP();
echo "SETOR : .$produto->getSetor()->
//aqui não consigo pegar atributo nenhum da classe Setor.
Dragon não me leve a mal mais assim tudo na mesma classe fica um código que foge do padrão MVC que é cada classe em um arquivo .
Quero cada classe funcione separadamente em pastas com arquivos separados.
Obs: Eu mostrei tudo junto a nível de abstração mas ele esta em pastas em arquivos separados.
Ok.
Ou se estiver usando php 7 pode usar strict mode (pesquise a respeito) forçando o tipo de retorno…
function getSetor() : Setor {
return $this->Setor;
}
Algo nesse sentido, não me recordo a sintaxe…
Isso as vezes é necessário, lembrando que php é uma linguagem de tipagem dinamica, sem vc dar dicas o editor/ide não sabe o que irá retornar do método (o new Setor que vc deu no construct de Produto não garante nada) e talvez seja esse o ponto dele (o editor) não auto completar seu comando…
E por fim, outra saida/alternativa é declarar namespaces para facilitar identificação no código (tanto da parte do programador quanto da ide)…
namespace modelo;
class Setor {
...
}
namespace modelo;
class Produto {
...
}
Depois nas chamadas/instancias precisa alem do requiere:
require_once...;
use modelo\Setor;
use modelo\Produto;
$setor = new Setor...
Então eu acho que você não entendeu nada! tudo que eu fiz foi colocar isso na mesma resposta para que você visualize o resultado. Ninguém está dizendo que você precise fazer tudo junto, ninguém citou nada a respeito de MVC e esse não é o foco do problema. O foco do seu problema é que você não entendeu a minha resposta …