Boas pessoal,
Precisava de uma ajuda na maneira de organização de duas classes
Exemplo:
Eu quero enviar encomendas utilizando várias empresas de correio ( ctt, dhl, fedex, etc )
E cada uma dessas empresas é uma classe, e que têm o método para enviar encomendas:
class-ctt.php
class-dhl.php
class-fedex.php
O que eu fiz foi
class-enviarEncomendas.php // que trata de enviar encomendas
class-meuprojecto.php // class para gestão do meu projecto
class-enviarEncomendas.php
Código (PHP):
class-meuprojecto.php
Código (PHP):
(Ok, até agora isto está a funcionar, e sei que talvez não seja a melhor maneira de fazer isto, por isso podem dar as vossas opiniões.)
O problema:
Agora o problema é que eu quero modificar o metodo enviarEncomenda()de maneira que se o envio pelos ctt falhar, tenta enviar pelo fedex, se este também falhar passa para a próxima empresa.
A solução que tinha pensado era fazer um array por ordem de preferência: array("ctt", "fedex", etc) e percorrê-lo enquanto não for retornado true, mas também quero que seja possivel definir apenas e só uma empresa de envio.
No meio disto tudo não como é obvio não posso estar a instanciar classes de cada empresa...
Bem, como é que vocês fariam ou como é que eu devo fazer?
Precisava de uma ajuda na maneira de organização de duas classes
Exemplo:
Eu quero enviar encomendas utilizando várias empresas de correio ( ctt, dhl, fedex, etc )
E cada uma dessas empresas é uma classe, e que têm o método para enviar encomendas:
class-ctt.php
class-dhl.php
class-fedex.php
O que eu fiz foi
class-enviarEncomendas.php // que trata de enviar encomendas
class-meuprojecto.php // class para gestão do meu projecto
class-enviarEncomendas.php
Código (PHP):
require 'class-ctt.php';
require 'class-dhl.php'
require 'class-fedex.php'
class class-enviarEncomendas {
private empresaTransporte;
private empresaInstancia;
function __construct($empresa) {
if($empresa == "ctt") {
$this->empresaInstancia = new ctt();
}
else if($empresa == "fedex") {
$this->empresaInstancia = new fedex();
}
else if {
// assim em diante
}
$this->empresaTransporte = $empresa;
}
public function enviarEncomenda() {
//agora vejo novamente qual a empresa que foi chamada no construct e chamo o método correspondente
if($this->empresaTransporte == "ctt") {
$this->empresaInstancia->MetodoEnviarCTT();
}
else if($this->empresaTransporte == "fedex") {
$this->empresaInstancia->MetodoEnviarFEDEX();
}
}
}
require 'class-dhl.php'
require 'class-fedex.php'
class class-enviarEncomendas {
private empresaTransporte;
private empresaInstancia;
function __construct($empresa) {
if($empresa == "ctt") {
$this->empresaInstancia = new ctt();
}
else if($empresa == "fedex") {
$this->empresaInstancia = new fedex();
}
else if {
// assim em diante
}
$this->empresaTransporte = $empresa;
}
public function enviarEncomenda() {
//agora vejo novamente qual a empresa que foi chamada no construct e chamo o método correspondente
if($this->empresaTransporte == "ctt") {
$this->empresaInstancia->MetodoEnviarCTT();
}
else if($this->empresaTransporte == "fedex") {
$this->empresaInstancia->MetodoEnviarFEDEX();
}
}
}
class-meuprojecto.php
Código (PHP):
class-meuprojecto extends class-enviarEncomendas {
private empresaTransporte = ctt; // defino a empresa que quero utilizar para o envio
function __construct() {
parrent:construct($this->empresaTransporte);
// outras variaveis são definidas aqui também
}
public function enviar() {
$this->enviarEncomenda() // chamo o metodo da class parent
//fazer as query para guardar, etc, blalbal
}
}
private empresaTransporte = ctt; // defino a empresa que quero utilizar para o envio
function __construct() {
parrent:construct($this->empresaTransporte);
// outras variaveis são definidas aqui também
}
public function enviar() {
$this->enviarEncomenda() // chamo o metodo da class parent
//fazer as query para guardar, etc, blalbal
}
}
(Ok, até agora isto está a funcionar, e sei que talvez não seja a melhor maneira de fazer isto, por isso podem dar as vossas opiniões.)
O problema:
Agora o problema é que eu quero modificar o metodo enviarEncomenda()de maneira que se o envio pelos ctt falhar, tenta enviar pelo fedex, se este também falhar passa para a próxima empresa.
A solução que tinha pensado era fazer um array por ordem de preferência: array("ctt", "fedex", etc) e percorrê-lo enquanto não for retornado true, mas também quero que seja possivel definir apenas e só uma empresa de envio.
No meio disto tudo não como é obvio não posso estar a instanciar classes de cada empresa...
Bem, como é que vocês fariam ou como é que eu devo fazer?
