Olá, bom dia a todos.
Gostaria de saber o porquê de como o código está o terminal não conseguir converter o tipo string para o tipo Cpf, analizei e não cheguei a uma conclusão, a meu ver devia funcionar pois é semelhante a como o orientador Vinícius fez.
arquivo banco.php:
<?php
require_once "src/conta.php";
require_once "src/Titular.php";
require_once "src/Cpf.php";
$douglas = new Titular("Douglas Augusto");
$cpfDouglas = new Cpf("123.456.789-10");
$primeiraConta = new Conta($cpfDouglas, $douglas);
$stella = new Titular("Stella Britto");
$cpfStella = new Cpf("123.456.789-09");
$segundaConta = new Conta($cpfStella, $stella);
$barney = new Titular("Barney Cachorro");
$cpfBarney = new Cpf("321.654.987-01");
$terceiraConta = new Conta($cpfBarney, $barney);
$primeiraConta->deposita(1500);
$primeiraConta->saca(300); 
echo $primeiraConta->mostraNomeTitular() . PHP_EOL;
echo $primeiraConta->mostraCpfTitular() . PHP_EOL;
echo $primeiraConta->mostraSaldo() . PHP_EOL;
var_dump($terceiraConta);
echo Conta::mostraNumeroDeContas();
arquivo conta.php:
<?php
class Conta
{
    private $titular;
    private $cpf;
    private $saldo;
    private static $numeroDeContas = 0;
    public function __construct(Cpf $cpf, Titular $titular) 
    {
        $this->titular = $titular;
        $this->$cpf = $cpf;
        $this->saldo = 0;
        self::$numeroDeContas++;
    }
    public function __destruct()
    {
        if (self::$numeroDeContas > 2) 
        {
            self::$numeroDeContas--;
        }
    }
    public static function mostraNumeroDeContas() : int
    {
        return self::$numeroDeContas;
    }
    public function saca(float $valorASacar)
    {
        if ($this->saldo < $valorASacar)
        {
            echo "Você não pode sacar";
            return;
        }
        $this->saldo -= $valorASacar;
    }
    public function deposita(float $valorADepositar)
    {
        if ($valorADepositar <= 0)
        {
            echo "Valor precisa ser maior";
            return;
        }
            $this->saldo += $valorADepositar;
    }
    public function transfere(float $valorATransferir, Conta $contaDestino)
    {
        if ($valorATransferir > $this->saldo)
        {
            echo "Valor a transferir maior do saldo atual.";
            return;
        }
        $this->saca($valorATransferir);
        $contaDestino->deposita($valorATransferir);
    }
    public function mostraSaldo() : float
    {
        return $this->saldo;
    }
    public function defineTitular(string $titular)
    {
        $this->titular = $titular;
    }
    public function defineCpf($cpf)
    {
        $this->cpfTitular = $cpf;
    }
    public function mostraNomeTitular(): string
    {
        return $this->titular->mostraNome();
    }
    public function mostraCpfTitular(): string
    {
        return $this->cpf->mostraCpf();
    }
}
arquivo Titular.php:
<?php
class Titular
{
    private $nome;
    public function __construct(string $nome) {
        $this->validaNomeTitular($nome);
        $this->nome = $nome;        
    }   
    private function validaNomeTitular($titular)
    {
        if (strlen($titular) < 5) {
            echo "Nome precisa ter mais que 4 caracteres";
            exit();
        }
    }
    public function mostraNome() : string
    {
        return $this->nome;
    }
}arquivo Cpf.php:
<?php
class Cpf
{
    private $cpf;
    public function __construct(string $cpf) 
    {
        $this->cpf = $cpf;
    }
    public function mostraCpf() : string
    {
        return $this->cpf;
    }
}