Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Objeto aparentemente não está sendo convertido pra String, Não identifiquei aonde está o erro

erros: PHP Fatal error: Uncaught TypeError: Argument 1 passed to Titular::__construct() must be of the type string, object given

\banco.php(6): Titular->__construct(Object(Cpf), 'Carlos')

Arquivo de ExecuçaoBanco.php

<?php
require 'src/Conta.php';
require 'src/Titular.php';
require 'src/Cpf.php';
$cpf1 = new Cpf("11111111111");
$carlos = new Titular("Carlos",$cpf1);

$conta1 = new Conta($carlos);


$cpf2 = new Cpf("22222222222");
$patricia = new Titular("patricia",$cpf2);
$conta2 = new Conta($patricia);


echo $conta1->mostrarNome().PHP_EOL;
echo $conta1->mostrarCpf().PHP_EOL;

Classe Conta.php

<?php

class Conta
{
    public string $Titular;
    private float $saldo = 0;
    private static int $numerodeContas = 0;

    public function __construct(Titular $titular)
    {
        $this->titular = $titular;
        $this->saldo = 0;
        self::$numerodeContas++;
    }
    public function __destruct()
    {
        if (self::$numerodeContas > 1) {
            echo "Mais de uma conta ativa";
        }
        Self::$numerodeContas--;
    }
    public function sacar(float $valorAsacar): void
    {
        if ($valorAsacar > $this->saldo) {
            echo "Você não tem Saldo suficiente pra Sacar";
            return;
        }
        $this->saldo -= $valorAsacar;
    }
    public function depositar(float $valorAdepositar): void
    {
        if ($valorAdepositar > 0) {
            $this->saldo += $valorAdepositar;
            return;
        }
        echo "Você só pode fazer depósitos de valores positivo";
    }
    public function trans(float $valorAtransferir, $contaDestino): void
    {

        if ($valorAtransferir > $this->saldo) {
            echo "voce nao tem saldo suficiente pra transferir";
            return;
        }
        $this->saldo -= $valorAtransferir;
        $contaDestino->depositar($valorAtransferir);
    }
    public function saldo(): float
    {
        return $this->saldo;
    }
    public function mostrarCpf()
    {
        return $this->titular->getCpf();
    }
    public function mostrarNome(): string
    {
        return $this->titular->getNome();
    }
    public static function mostrarContas()
    {
        return Conta::$numerodeContas;
    }
}

Classe Titular.php

<?php
class Titular
{
    private Cpf $cpf;
    private string $nome;

    public function __construct(String $nome, Cpf $cpf)
    {

        $this->validaNome($nome);
        $this->nome = $nome;
        $this->cpf = $cpf;

    }


    public function getNome()
    {
        return $this->nome;
    }
    private function validaNome(String $nomeTitular)
    {
        if (strlen($nomeTitular) < 5) {
            echo "Seu nome precisa no minimo ter 5 caracteres";
            exit();
        }
    }

    public function mostrarTudo()
    {
        echo "$this->nome" . PHP_EOL;
        echo "$this->cpf" . PHP_EOL;
    }
}

Classe Cpf.php

<?php

class Cpf
{
    private $numero;

    public function __construct(String $numero)
    {
        //$this->validarCpf($cpf);
        $this->numero = $numero;
    }

    public function getCpf()
    {
        return $this->numero;
    }

    /*public function validarCpf($cpf) : void
    {
        if(strlen($cpf)!=11){
           echo "Cpf invalido";
           exit();
        }
    }*/
}
1 resposta
solução!

E ei Cales blza? bom, com base no seu erro: erros: PHP Fatal error: Uncaught TypeError: Argument 1 passed to Titular::__construct() must be of the type string, object given

\banco.php(6): Titular->__construct(Object(Cpf), 'Carlos')

está dizendo que o primeiro argumento passado para criar um Titular na linha 6 do arquivo banco.php deve ser string e foi passado um objeto, então, caso o arquivo identificado como execuçãoBanco.php seja o dito cujo, o código está certo e deve funcionar, talvez vc tenha trocado a ordem dos parametros e quando viu que estava trocado foi e arrumou, mas não salvou o arquivo antes de testar??? pq o código que vc passou está correto.

linha 6 do seu código: $carlos = new Titular("Carlos",$cpf1);

roo retornado: __construct(Object(Cpf), 'Carlos')

viu? não é esse arquivo que foi executado :)