Ir para conteúdo

POWERED BY:

Arquivado

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

paulo_campos01

Como herdar de duas classes?

Recommended Posts

Olá pessoal, preciso herdar de duas classes, tanto da biblioteca FPDF quanto da Boleto, como eu faria?

Segue o script da classe principal...



 

include_once ('fpdf/fpdf.php');
include_once ("boleto.class.php");


class TplBoleto extends FPDF {


public function constructObject(){
foreach($this->output as $key => $value){
  ${$key} = $value;
}
}


public function Add(){


$this->AddPage();
$this->SetFont('arial','B',12);
$this->Cell(0,5,$this->valor_boleto,0,1,'L');
$this->Ln(8);
$this->Output();


}
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

prefira composição a herança.

 

nesse teu caso vc não precisa herdar. Basta instanciar as classes dentro dela e usar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, William Bruno, mas o valor não está chegando de jeito nenhum...
Fora da classe ele chega, por que é enviado pela outra.

Da uma ideia ai de como ficaria cara, 3 noites já aushuahsa.

Vlw, abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

PHP assim como o Java, não tem suporte para herança múltipla, seria interessante ambas terem..

 

 

constructObject ? não seria TplBoleto() ou __construct...

herança multipla da dor de cabeça, a unica linguagem q implementa isso q eu lembre é C++. Procure por problema do diamante.

 

http://www.paulocanedo.com.br/2009/11/17/entendendo-orientacao-a-objetos-parte-1-2/

 

o mais indicado é usar interfaces.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, eu só preciso levar o valor pra dentro da classe... só que eu nunca trabalhei desta forma, olha só:
dento da class Boleto:

 

 

 

  protected function __construct($arguments){
    $this->arguments['data_documento']   = date('d-m-Y');
    $this->arguments['data_processamento'] = $this->arguments['data_documento'];
    

    foreach($arguments as $argument => $value){
      $this->arguments[$argument] = $value;
    }

    if (!isset($arguments['title'])){
      $this->arguments['title'] = $this->arguments['cedente'];   
    }
    $this->bank_code = trim($arguments['bank_code']);


    $this->constructObject();
  }

Ainda dentro da class Boleto:

 

 

 

public function output($render = TRUE){
    // Campos que seram impressos no Template.
    $this->output = array(
      'titulo' => $this->arguments['titulo'],
      'linha_digitavel' => $this->computed['linha_digitavel'],
Ai vai...

 

Agora preciso levar pra dentro da class TplBoleto:

mas como?

 

 

 

include_once ("fpdf/fpdf.php");
include_once ("boleto.class.php");

class TplBoleto extends FPDF {

public function Add(){

$out = new Boleto();
foreach($out->output as $key => $value){
${$key} = $value;
}

$this->AddPage();
$this->SetFont('arial','B',12);
$this->Cell(0,5,$valor_boleto,0,1,'L');
$this->Ln(8);
$this->Output();


}
}

Tentei assim mas ele fala que não é possível instanciar em class Boleto...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, você está certamente começando com OOP, esse problema é o maior problema que alguém enfrenta no início: querer sair herdando tudo e pensar que tudo vai funcionar porque deus quer :lol:.

 

Há formas diferentes de relacionamento entre classes e objetos: a vertical (herança) e a horizontal (composição/agregação/associação), sem isso complica o entendimento de toda a base da OOP.

 

Sobre o código que postou, construct protegido??? como assim? mostre a classe como um todo.

 

---

 

shini, interfaces não tem a ver com comportamento, isso é com o Java, interface no PHP é realmente interface, só o contrato e Python implementa herança múltipla também, infelizmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo a herança múltipla poder de alguma forma causar dor de cabeça, a linguagem não obriga ninguém a utilizar, logo, seria interessante se nós tivéssemos pelo menos a opção de poder usar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo a herança múltipla poder de alguma forma causar dor de cabeça, a linguagem não obriga ninguém a utilizar, logo, seria interessante se nós tivéssemos pelo menos a opção de poder usar...

tem tanta coisa pra fazer gambiarra vc quer mais? rs

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.