Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nerdmonkey

Trabalhando com extends

Recommended Posts

Bom dia.

 

 

class CheckUserLogin extends InitClass
{
    public function __construct()
    {
        $this->classRead();
    }
 
    public function readData()
    {
        $this->classRead()->ExeRead();// Not work well
    }
}

 

 

class InitClass
{
    protected $read;
 
    protected function classRead()
    {
        $this->read = new Read;
    }
}

 

O que eu gostaria de saber é, como eu faço para utilizar o método classRead() para instanciar minha classe automaticamente, por exemplo: $this->classRead()->ExeRead()?

 

O ExeRead() é o método da classe Read que faz a leitura da tabela.

Tentei como está lá no readData(), mas a IDE nunca encontra o método ExeRead. Sendo assim preciso sempre criar um novo atributo, $read, e criar o objeto a partir dele, $read = new Read. Só assim consigo utilizar o $read->ExeRead().

 

Onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Orientação à Objetos se resumo em confiança. Confiança na interface disponibilizada.

 

Em um primeiro momento, há uma quebra de confiança na sua implementação:

class InitClass
{
    protected $read;
 
    protected function classRead()
    {
        $this->read = new Read;
    }
}

O método classRead, apenas cria um novo Read ao atributo $read.

 

Já no método abaixo:

public function readData()
{
    $this->classRead()->ExeRead();// Not work well
}

Espera receber reader criado, através do método classRead().

 

Entretanto, o método classRead não identifica o uso do método ao desenvolvedor, o que é um tanto ruim, pois para saber o que ele faz, é necessário ver sua implementação.

 

Vamos modificar um pouco sua classe base, utilizar o prefixo get (para informar um retorno) e adicionar um phpDoc para melhorar a interface.

class InitClass
{
    protected $read;
 
    /**
     * Return an instance of Read
     * If an instance doen's exist, create a new one
     * @return Read
     **/
    protected function getClassRead()
    {
        if(!$this->read instanceof Read) {
            $this->read = new Read;
        }

        return $this->read;
    }
}

E altere para o novo método:

public function readData()
{
    $this->getClassRead()->ExeRead();
}

No final das contas, basicamente foi esquecido do return, mas o método em si não dizia muita coisa para o desenvolver, principalmente que ele receberia, ou não, uma instância de Read.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.