do PHP SPL: Faça suas interfaces envolvendo matrizes cobrir todas as propriedades da matriz?

StackOverflow https://stackoverflow.com/questions/145376

  •  02-07-2019
  •  | 
  •  

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top