Faz tempo que não programo em PHP, mas não me parece nada muito complicado, pense de dentro pra fora:
Isso aqui é uma conceito chamado HEREDOC, não é exclusividade do PHP
<<<LABEL
Olá, meu nome é {$this->name}, tenho {$this->age} anos de idade
e sou amigo da {$this->friend}
LABEL;
Aqui está sendo retornado um novo objeto de uma classe anônima
return new class($name, $age, $friend)
{
function __construct(private $name, private $age, private $friend)
{
}
public function saudation(): string
{
return <<<LABEL
Olá, meu nome é {$this->name}, tenho {$this->age} anos de idade
e sou amigo da {$this->friend}
LABEL;
}
};
Aqui está criando uma função anônima que recebe 2 parâmetros e utiliza uma variável do escopo externo ao da função, no caso $friend
que está declarado logo acima.
E essa funçõa anônima está sendo atribuída à uma variável chamada $getPerson
.
Quem é de JS está bem acostumado a atribuir funções para variáveis.
$getPerson = function ($name, $age) use ($friend): object {
////
}
E aqui é apenas a chamada da função contida na variável
$person = $getPerson("Gabriel", 19);
Não tem nada demais nesse código, só é uma sintaxe pouco usada em cursos para iniciantes.
Outra forma de se fazer a mesma coisa, mas como uma sintaxe mais comum para que está aprendendo seria aglo mais ou menos assim:
class Person {
private $name;
private $age;
private $friend;
// Essa é a forma mais clássica, mas há formas mais modernas
// de declarar atributos no construtor
function __construct($name, $age, $friend)
{
$this->name = $name;
$this->age = $age;
$this->friend = $friend;
}
public function saudation(): string
{
return <<<LABEL
Olá, meu nome é {$this->name}, tenho {$this->age} anos de idade
e sou amigo da {$this->friend}
LABEL;
}
};
$person = new Person("Gabriel", 19, "Allyce");
echo $person->saudation();