Boa noite! Tudo bem?
Por que ao deixar meu código no estilo como está o do exercício visualizei este erro?
Fatal error: Uncaught Error: Call to a member function comCnpj() on null in C:\xampp\htdocs\curso-designpatterns\gerarNF.php:16 Stack trace: #0 {main} thrown in C:\xampp\htdocs\curso-designpatterns\gerarNF.php on line 16
<?php
date_default_timezone_set("Brazil/East");
function autoload($class) {
require $class.".php";
}
spl_autoload_register("autoload");
$gerador = new NotaFiscalBuilder();
$gerador->addAcao(new Impressora());
$gerador->addAcao(new NotaFiscalDao());
$gerador->addAcao(new Multiplicador(6));
$nf = $gerador->comEmpresa('MilKu')
->comCnpj('123.456.789/0001-10')
->addItem(new Item('iPhone', 3500))
->addItem(new Item('Galaxy S9', 3500))
->addItem(new Item('Carregador', 100))
->addItem(new Item('Case', 50))
->comObservacoes('Comprei tudinho')
->build();
echo "<pre>";
var_dump($nf);
?>
<?php
class NotaFiscalBuilder {
private $empresa;
private $cnpj;
private $itens;
private $valorBruto;
private $valorImpostos;
private $observacoes;
private $dtEmissao;
private $acoesAoGerar;
function __construct(){
$this->valorBruto = 0;
$this->valorImposto = 0;
$this->dtEmissao = date('Y-m-d H:i:s');
$this->itens = array();
$this->acoesAoGerar = array();
}
public function addAcao(AcoesAoGerarNF $acao){
$this->acoesAoGerar[] = $acao;
}
public function comEmpresa($empresa){
$this->empresa = $empresa;
}
public function comCnpj($cnpj){
$this->cnpj = $cnpj;
}
public function addItem(Item $item){
$this->itens[] = $item;
$this->valorBruto += $item->getValor();
$this->valorImpostos += ($item->getValor() * 0.2);
}
public function comObservacoes($obs){
$this->observacoes = $obs;
}
public function naData($data){
$this->dtEmissao = $data;
}
public function build(){
$nf = new NotaFiscal($this->empresa, $this->cnpj, $this->itens, $this->valorBruto, $this->valorImpostos, $this->observacoes, $this->dtEmissao);
//antes do retorno
foreach($this->acoesAoGerar as $acao){
$acao->executa($nf);
}
return $nf;
}
}
?>
Muito obrigado!