Pegar atributos e metodos da classe pela referência de outra classe

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>

Obrigado!!!

Acesse o método

$produto->getSetor()->getDescricatCat()

Dragoon só que aparece ate o $produto->getSetor()-> o getDescrição não aparece.
Esse e o Problema.

Você criou as classes, mas, na classe Setor não tinha a propriedade Codigo, corrigindo:

<?php

    class Setor {
        
        private $descricaoCat;
        private $codigo;
        
        function getCodigo() {
        	return $this->codigo;
        }
        
        function getDescricaoCat() {
            return $this->descricaoCat;
        }

		function setCodigo($codigo){
			$this->codigo = $codigo;	
		}
		
        function setDescricaoCat($descricaoCat) {
            $this->descricaoCat = $descricaoCat;
        }
    }

    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;
        }
    }
    
    $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 $produto->getSetor()->getDescricaoCat();

ou seja, estava dando erro antes da exibição e agora vai funciona.

Exemplo ONLINE

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!!!

se você postar o erro e a linha que acontece o problema acho que podemos ajudar?

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.

Se você fizer igual no meu exemplo que te passei vai dar certo, ! Obrigadooooooooo

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.

Tente colocar junto ao método que retorna o objeto um “phpdoc”, assim facilita a leitura por parte do editor/ide que vc está usando, algo assim:

/**
 * @return Setor
 */
 function getSetor() {
     return $this->Setor;
 }

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...

Também pesquise a respeito…

Grande rodevops obrigado pela ajuda Resolvi você e o cara KKKKK!!! abraços!!!

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 …