Uma matriz ou objeto PHP ou outra estrutura de dados complexa não pode ser transportada ou armazenada ou usada fora de um script PHP em execução . Se você quiser manter uma estrutura de dados tão complexa além de uma única execução de um script, precisará serializá- la. Isso significa apenas colocar a estrutura em um "denominador comum inferior" que pode ser manipulado por outras coisas que não o PHP, como bancos de dados, arquivos de texto, soquetes. A função PHP padrão serialize
é apenas um formato para expressar isso, serializa uma estrutura de dados em uma representação de string exclusiva do PHP e pode ser revertida em um objeto PHP usando unserialize
. Existem muitos outros formatos, como JSON ou XML.
Tomemos, por exemplo, este problema comum:
Como passo uma matriz PHP para Javascript?
PHP e Javascript podem se comunicar apenas através de strings. Você pode passar a string com "foo"
muita facilidade para Javascript. Você pode passar o número 1
muito facilmente para Javascript. Você pode passar os valores booleanos true
e false
facilmente para Javascript. Mas como você passa essa matriz para Javascript?
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 )
A resposta é serialização . No caso de PHP / Javascript, JSON é realmente o melhor formato de serialização:
{ 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' }
O Javascript pode facilmente reverter isso para uma matriz Javascript real.
Esta é uma representação igualmente válida da mesma estrutura de dados:
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}
Mas praticamente apenas o PHP o usa, há pouco suporte para esse formato em qualquer outro lugar.
Isso é muito comum e bem suportado, embora:
<array>
<element key='1'>elem 1</element>
<element key='2'>elem 2</element>
<element key='3'>elem 3</element>
</array>
Existem muitas situações em que você precisa passar estruturas de dados complexas como strings. A serialização, representando estruturas de dados arbitrárias como seqüências de caracteres, resolve como fazer isso.