Evitando class_exists no código WordPress orientado a objetos
Se você escrever código orientado a objetos para WordPress (geralmente dentro do contexto de plugins), provavelmente encontrará uma verificação class_exists antes de inicializar uma classe. Mas devemos começar a evitar class_exists em grande parte do nosso código neste ponto (com algumas exceções que descreverei abaixo).
Dependendo da versão do PHP que você está usando, isso faz sentido. Ou foi uma vez. A partir do PHP 5.3.0, isso não é necessário. Em vez disso, é uma prática melhor usar namespaces.
Evitando class_exists
Você pode ver todos os requisitos para várias versões do WordPress nesta página, portanto, se você estiver trabalhando com versões legadas do WordPress, toda a verificação class_exists pode valer a pena.
Ainda assim, há uma observação importante :
Nota: Se você estiver em um ambiente legado onde você tem apenas versões mais antigas do PHP ou MySQL, o WordPress também funciona com PHP 5.2.4+ e MySQL 5.0+, mas essas versões atingiram o fim da vida útil oficial e, como tal, podem expor seu site a vulnerabilidades de segurança.
Mas para a maioria de nós, ambientes de hospedagem modernos suportam pelo menos PHP 5.3.0, se não superior, e por causa disso, não precisamos usar class_exists.
Dito isto, não é incomum ver algo assim :
<?php
if (! class_exists( 'My_Unique_Class')) {
class My_Unique_Class {
// class implementation
}
}
Ou assim :
<?php
if (class_exists( 'My_Unique_Class')) {
return;
}
class My_Unique_Class {
// class implementation
}
Anos atrás, eu escreveria código assim também. Às vezes era para interagir com uma base de código pré-existente. Outras vezes, era porque eu não conhecia nada melhor. O problema é que isso se tornou algo que vemos no código baseado no WordPress quando não precisamos usá-lo.
Na verdade, eu diria que não deveríamos mais usá-lo.
Mas quanto mais código você escreve e quanto mais código você lê, mais você aprende, certo? Isso é parte de todo o motivo dos namespaces e do carregamento automático.
Então, como o código acima seria escrito?
Talvez assim :
<?php
namespace TomMcFarlin;
class My_Unique_Class {
// class implementation
}
Ainda assim, isso levanta a questão para alguns: como os namespaces ajudam no lugar do uso de class_exists?
Idealmente, se a mesma classe existir em um namespace, há um problema com o namespace. Lembre-se de que você pode pensar em um namespace como um pacote composto de peças únicas. E por serem únicas, nunca deveria haver outra peça ou, nesta classe, outra classe igual.
Para esse fim, em vez de usar verificações class_exists, tente usar namespaces. Claro, não estou dizendo para voltar atrás e refatorar todo o seu código – eu não fiz isso – mas isso não significa que o código que escrevo ou reviso inclua o uso ou recomendações.
É uma mudança fácil que pode ajudar bastante a manter o código mais fácil de ler, cheio de menos condicionais (um post para outra hora) e mantê-lo muito mais organizado.