Una matriz u objeto PHP u otra estructura de datos compleja no se puede transportar, almacenar ni utilizar fuera de un script PHP en ejecución . Si desea persistir una estructura de datos tan compleja más allá de una sola ejecución de un script, debe serializarla . Eso solo significa poner la estructura en un "mínimo común denominador" que puede ser manejado por otras cosas que no sean PHP, como bases de datos, archivos de texto, sockets. La función PHP estándar serializees solo un formato para expresar tal cosa, serializa una estructura de datos en una representación de cadena que es exclusiva de PHP y se puede revertir en un objeto PHP usando unserialize. Sin embargo, hay muchos otros formatos, como JSON o XML.
Tome por ejemplo este problema común:
¿Cómo paso una matriz PHP a Javascript?
PHP y Javascript solo pueden comunicarse a través de cadenas. Puede pasar la cadena "foo"muy fácilmente a Javascript. Puede pasar el número 1muy fácilmente a Javascript. Puede pasar los valores booleanos truey falsefácilmente a Javascript. Pero, ¿cómo se pasa esta matriz a Javascript?
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 )
La respuesta es la serialización . En el caso de PHP / Javascript, JSON es en realidad el mejor formato de serialización:
{ 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' }
Javascript puede revertir esto fácilmente en una matriz de Javascript real.
Sin embargo, esta es una representación igual de válida de la misma estructura de datos:
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}
Pero prácticamente solo PHP lo usa, hay poco soporte para este formato en cualquier otro lugar.
Sin embargo, esto es muy común y está bien respaldado:
<array>
<element key='1'>elem 1</element>
<element key='2'>elem 2</element>
<element key='3'>elem 3</element>
</array>
Hay muchas situaciones en las que necesita pasar estructuras de datos complejas como cadenas. La serialización, que representa estructuras de datos arbitrarias como cadenas, resuelve cómo hacer esto.