Ir para conteúdo

Arquivado

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

Rogério Santana

Extends OOP

Recommended Posts

Bom dia pessoal.

 

Tenho uma dúvida em como utilizar uma classe utilizando dois extends.

 

Preciso ter conexão com dois bancos de dados e utilizaria o extends para poder reutilizar várias classes.

 

 

O que necessito seria basicamente.

ConectaBanco.class.php

Class ConectaBanco{
   /* Atributos, métodos e tudo mais*/
}
ConectaBancoTwo.class.php

Class ConectaBancoTwo{
   /* Atributos, métodos e tudo mais*/

}

Teria vários arquivos que utilizaria as Classes ConectaBanco e ConectaBancoTwo como SubClasse

Onde.class.php 
Class Onde extends ConectaBanco ConectaBancoTwo{

/*sei que o que está acima está errado, mas aí é a questão.*/

}

Ou será que existe outra forma para que eu possa fazer essa interação?

 

Obrigado

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cara.. faz injeção de dependência.

 

Não faz sentido utilizar herança para esse teu caso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma classe para conexão não deve conhecer qual é o banco e nem mesmo suas configurações

 

Você precisa de uma interface.

 

Podem existir muitas classes de conexão, mas para serem responsaveis por bancos diferentes e

apenas uma interface para ser utilizada por estas classes.

 

Exemplo:

 

Interface

 

AbstractConnectorConfig

 

__construct($host, $user, $password [,...]

 

Abstração de bancos de dados:

 

MySqlConnector extends AbstractConnectorConfig

 

PostgreSQLConnector extends AbstractConnectorConfig

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinceramente eu li, reli e não conseguir compreender o óbvio para executar.

class Conn {
private static $Host = HOST;
private static $User = USER;
private static $Pass = PASS;
private static $Db = DB;

/* @var PDO */
private static $Connect = null;

private static function Conectar(){
 try{
   if(self::$Connect == null):
   $dsn = 'mysql:host='.self::$Host.';dbname='.self::$Db;
   $options = [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'];
   self::$Connect = new PDO($dsn, self::$User, self::$Pass, $options);
   endif;
 } catch (PDOException $e) {
    PHPErro($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine());
    die;
 }
 
   self::$Connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   return self::$Connect;
  }
   
   public static function getConn() {
       return self::Conectar();
   }
}

Então deixa eu passar aqui os passos:

 

Eu tenho um arquivo config.php na raiz onde armazeno os valores das contantes HOST, USER, PASS, DB

 

faço o login através desse primeiro DB,

 

Daí eu tenho um diretório

cliente1 (dentro dele um arquivo config_two.php)

cliente2 (dentro dele um arquivo config_two.php)

 

De acordo com quem logou, ele vai acessar os dados da config_two.php para conectar ao segundo banco de dados e obter as informações separadas de cada cliente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você entende qual o sentido de se utilizar interface nesse seu problema?

Caso negativo, veja - http://php.net/manual/pt_BR/language.oop5.interfaces.php

 

Na realidade "o buraco é mais embaixo", pois o ideal seria uma camada de abstração a banco de dados.

 

Então, você pode estudar/aprender ( o que é muito plausível e recomendado, porém leva tempo) ou utiliza uma solução pronta, como por exemplo - http://dibiphp.com/cs.

 

Inclusive as API's de frameworks como (Laravel, Zend, etc) são ótimos lugares para se tentar entender como essas camadas funcionam e suas complexidades.

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.