"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso instanciar uma classe a partir de uma variável em PHP?

Como posso instanciar uma classe a partir de uma variável em PHP?

Publicado em 2024-11-18
Navegar:917

How Can I Instantiate a Class from a Variable in PHP?

Implementando a instanciação de classe a partir de uma variável em PHP

Em PHP, você pode encontrar um cenário em que precisa instanciar uma classe a partir do valor de uma variável. Vamos ilustrar isso com um exemplo:

$var = 'bar';
$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');

Este método tenta criar uma instância da classe especificada pela variável $var. No entanto, o PHP não suporta esta sintaxe nativamente.

Abordagem alternativa sem eval()

Para conseguir isso sem usar eval(), você pode utilizar uma variável para armazenar o nome da classe:

$classname = $var . 'Class'; // e.g. $classname = 'barClass'

$bar = new $classname('var for __construct()');

Factory Pattern

Esta técnica é frequentemente empregada no padrão Factory, que é usado para centralizar a criação de classes e desacoplá-la desde o processo de criação. Nesses cenários, uma classe de fábrica criaria as instâncias de classe desejadas dinamicamente com base na configuração ou em outros parâmetros.

Recursos adicionais

Para obter mais informações sobre recursos de linguagem dinâmica e namespaces, consulte o seguinte recursos:

  • [Namespaces](https://www.php.net/manual/en/language.namespaces.php)
  • [Recursos de linguagem dinâmica](https:/ /www.php.net/manual/en/linguagem.types.dynamic.php)
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3