do PHP SPL: Faça suas interfaces envolvendo matrizes cobrir todas as propriedades da matriz?
Pergunta
Seria possível escrever uma classe que é virtualmente indistinguível de uma matriz PHP real através da implementação de todas as interfaces necessárias SPL? eles estão perdendo qualquer coisa que possa ser crítico?
Eu gostaria de construir um objeto Array mais avançado, mas eu quero ter certeza que eu não iria quebrar um aplicativo existente que usa matrizes em todos os lugares se eu substituído-los com uma classe Array personalizado.
Solução
Os únicos problemas que eu posso pensar são a) funções (gettype () eo is_array. Verifique se o seu código para
gettype($FakeArray) == 'array'
is_array($FakeArray)
Porque embora você pode usar o objeto como uma matriz, ela ainda será identificado como um objeto.
Outras dicas
Além dos pontos feitos acima, você não seria capaz de fazer tipo variedade de espaço do usuário dicas trabalho com instâncias de sua classe. Por exemplo:
<?php
function f(array $a) { /*...*/ }
$ao = new ArrayObject();
f($ao); //error
?>
Output:
Catchable fatal error: Argument 1 passed to f() must be an array, object given
Outras diferenças incluem o operador '+' para matrizes (fusão) e a falha de todo o array_*
funções, incluindo a array_merge
e array_shift
comumente usado.