Opa, esse $this -> teste() foi falha minha.
Queria limpar um pedacinho de filepath sem ter de recriar o cache. Vou testar o modo como fez porque, visualmente está igualzinho o que eu estava fazendo.
Funcionou... Ou quase...
Estritamente do jeito que você postou, porém, dentro da minha classe ao invés de uma nova,
retornou o mesmo que você obteve.
Mas, como isso é um parte de um sistema de atualização, em linha de produção, o hash enviado
(que você populou no construtor) seria um completamente diferente, ao invés de mudar um único caractere.
Em paralelo, mantenho outro script de testes que me informa o hash real dos arquivos, isto é, a mesma
informação que o serviço receberá via POST para comparar.
Esse hash, nesse momento, é
949b6dc2061907b0fd5af3a7ed088bf9.
Oras, o que strcmp() faz na realidade?
Pergunto isso porque, depurando com var_dump(), obtive:
var_dump( strcmp( '28cbf3c60752631a3fa87e427e35afb5', '28cbf3c60752631a3fa87e427e35afb6' ) ); // int(-1)
var_dump( strcmp( '28cbf3c60752631a3fa87e427e35afb6', '28cbf3c60752631a3fa87e427e35afb5' ) ); // int(1)
var_dump( strcmp( '28cbf3c60752631a3fa87e427e35afb6', '949b6dc2061907b0fd5af3a7ed088bf9' ) ); // int(-1)
Pelo que entendi, no primeiro e terceiro caso a primeira string é menor que a segunda, enquanto no segundo é maior.
Mas menor e maior em quê? Me parece que strcmp() está comparando caractere a caractere e, quando encontra uma diferença,
determina se é maior ou menor (quando números) ou "vem antes ou depois" (quando letras). Acompanhe o esquema:
2 8 c b f 3 c 6 0 7 5 2 6 3 1 a 3 f a 8 7 e 4 2 7 e 3 5 a f b 5
2 8 c b f 3 c 6 0 7 5 2 6 3 1 a 3 f a 8 7 e 4 2 7 e 3 5 a f b 6
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = <
// Resultado: Menor, logo -1
O esquema está ilustrado pelos sinais de comparação

Como dá para perceber, o teste foi se desenrolou até que alguma diferença ocorreu e só então determinou como sendo
um hash diferente.
Já no terceiro caso, o primeiro caractere da primeira string é
2 e na segunda
9. Só a partir
desse caractere já deu diferença, sendo caracterizado como menor.
Eu não acredito que estou tão errado nessa afirmação pois, nos comentários do manual, um tal de Colin expõe
um exemplo que também usa strcmp() para comparar strings e, quando elas são exatamente iguais, ele também
obteve um array vazio.
Isso não é certo para esse caso.
Com tudi isso, fica a pergunta: Se para funcionar, array_udiff() requer que a função ou método de callback retorne
-1, 0 ou 1 e, para comparar essas strings essa exigência acaba se tornando uma impossibilidade, array_udiff() é a melhor
função para a tarefa?
Se o problema não for com array_udiff() e sim com a escolha de strcmp() (que não só eu achei problemática) para a
tarefa, há como fazer outra função retorna o esquema requerido poe array_udiff() ?
Enfim, por consideração a uma possível solução que não exija a desserialização do array de cache, vou postar as
estruturas correntes com seus respectivos hashes atualizados.
O registro com hash diferente, agora, fica para
AdvertisementController, bem mais diferente que um único caractere
// $cache (regenerado)
Array
(
[0] => Array
(
[filepath] => C:/Program Files/Zend/Apache2/htdocs/repository/wordpress/themes/Corporative/admin/application/controllers/AdvertisementController.php
[checksum] => 928c5e3bd0c5f8d3613fce7a3bdc9dac
[filename] => AdvertisementController.php
)
[1] => Array
(
[filepath] => C:/Program Files/Zend/Apache2/htdocs/repository/wordpress/themes/Corporative/admin/application/controllers/HomeController.php
[checksum] => 28cbf3c60752631a3fa87e427e35afb6
[filename] => HomeController.php
)
[2] => Array
(
[filepath] => C:/Program Files/Zend/Apache2/htdocs/repository/wordpress/themes/Corporative/admin/library/Zend/Controller/Request/Exception.php
[checksum] => ef458d8a75cc650d9cbf90ff89df9012
[filename] => Exception.php
)
)
// $POST
Array
(
[0] => Array
(
[filepath] => C:/Program Files/Zend/Apache2/htdocs/repository/wordpress/themes/Corporative/admin/application/controllers/AdvertisementController.php
[checksum] => 42ab4fc2af91337be03ce1cb7f4fd837
[filename] => AdvertisementController.php
)
[1] => Array
(
[filepath] => C:/Program Files/Zend/Apache2/htdocs/repository/wordpress/themes/Corporative/admin/application/controllers/HomeController.php
[checksum] => 28cbf3c60752631a3fa87e427e35afb6
[filename] => HomeController.php
)
[2] => Array
(
[filepath] => C:/Program Files/Zend/Apache2/htdocs/repository/wordpress/themes/Corporative/admin/library/Zend/Controller/Request/Exception.php
[checksum] => ef458d8a75cc650d9cbf90ff89df9012
[filename] => Exception.php
)
)