Ao criar uma extensão para uso comercial, seria bom se funcionasse em várias versões do Magento, talvez também CE e EE.
Mas às vezes isso não funciona como planejado, porque o núcleo muda de versão para versão.
Minha pergunta é sobre como lidar com as pequenas alterações no núcleo que afetam minha extensão. Não estou falando de grandes mudanças que exigem uma re-fatoração.
Aqui está um exemplo para torná-lo mais claro.
A partir do CE 1.8.1 (e EE 1.13.1), o método Varien_Io_File::write
mudou a maneira como funciona (a assinatura é a mesma) e o método filePutContent
apareceu write
fazendo algo semelhante ao que costumava fazer anteriormente.
No momento, faço algo hacky e verifico a versão do Magento para saber qual método usar para obter o mesmo resultado.
/** @var Varien_Io_File $io */
if (version_compare(Mage::getVersion(), '1.8.1', '<')) {
$io->write($destinationFile, $contents, 0777);
} else {
$io->filePutContent($destinationFile, $contents);
}
Agora, também quero que isso funcione no EE. Fica ainda mais feio porque o 1.8.1 é específico para o CE. Portanto, o código acima se torna
/** @var Varien_Io_File $io */
if (version_compare(Mage::getVersion(), $this->getCurrentVersion(), '<')) {
$io->write($destinationFile, $contents, 0777);
} else {
$io->filePutContent($destinationFile, $contents);
}
onde o método se getCurrentVersion
parece com isso
public function getCurrentVersion()
{
if (Mage::getEdition() == Mage::EDITION_ENTERPRISE) {
return '1.13.1';
}
return '1.8.1';
}
O código acima é um pouco simplificado (eu uso constantes adequadas para versões no meu código real )
Mas isso funciona para o CE 1.7 e superior quando o método Mage::getEdition()
foi introduzido. Se eu quiser que ele funcione na versão anterior à ce 1.7, fica ainda mais louco.
Agora imagine que isso muda novamente na versão CE 1.11 e EE 1.16. O caos está prestes a acontecer.
Existe uma maneira mais limpa de fazer isso sem fazer if
ou fazer case
declarações?
method_exists
(method_exists ( mixed $object , string $method_name )
), que é menos restritiva e mais confiável.