Meu problema é muito básico.
Não encontrei nenhum exemplo para atender às minhas necessidades sobre o que exatamente serialize()
e o que unserialize()
significa em php? Eles apenas dão um exemplo - serializam uma matriz e mostram uma saída em um formato inexplicável. É realmente difícil entender o conceito básico do jargão deles.
EDITAR:
<?php
$a= array( '1' => 'elem 1', '2'=> 'elem 2', '3'=>' elem 3');
print_r($a);
echo ("<br></br>");
$b=serialize($a);
print_r($b);
?>
resultado:
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 )
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}
Não consigo entender a segunda saída. Além disso, alguém pode dar um exemplo de uma situação em que eu preciso serializar um array php antes de usá-lo?
Respostas:
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 usandounserialize
. 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úmero1
muito facilmente para Javascript. Você pode passar os valores booleanostrue
efalse
facilmente para Javascript. Mas como você passa essa matriz para Javascript?A resposta é serialização . No caso de PHP / Javascript, JSON é realmente o melhor formato de serialização:
O Javascript pode facilmente reverter isso para uma matriz Javascript real.
Esta é uma representação igualmente válida da mesma estrutura de dados:
Mas praticamente apenas o PHP o usa, há pouco suporte para esse formato em qualquer outro lugar.
Isso é muito comum e bem suportado, embora:
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.
fonte
i:1
= inteiro 1,s:6:"elem 1"
= string com 6 caracteres "elem 1" ... E que exemplo você está pedindo, pensei em dar um?echo json_encode($array);
Como exatamente você passa depende das circunstâncias. Não fique muito preocupado com isso.PHP serialize () unserialize () uso
http://freeonlinetools24.com/serialize
O que lhe dá uma saída parecida com esta
novamente, se você deseja recuperar a matriz original, basta usar a função PHP unserialize ()
Espero que isso ajude
fonte
Quando você deseja tornar seu valor php armazenável, você deve transformá-lo em um valor de string, é o que serialize () faz. E unserialize () faz o contrário.
fonte
serialize()
eunserialize()
são feitos para.Execute este programa seu eco da saída
aqui
a = tamanho da matriz
i = contagem do número da matriz
s = tamanho dos valores da matriz
você pode usar serializar para armazenar a matriz de dados no banco de dados
e recuperar e serializar dados UN para usar.
fonte
A maioria dos meios de armazenamento pode armazenar string tipos de . Eles não podem armazenar diretamente uma estrutura de dados PHP, como uma matriz ou objeto, e não devem, pois isso associaria o meio de armazenamento de dados ao PHP.
Em vez disso,
serialize()
permite armazenar uma dessas estruturas como uma sequência. Ele pode ser desserializado de sua representação de string comunserialize()
.Se você está familiarizado com
json_encode()
ejson_decode()
(e JSON em geral), o conceito é semelhante.fonte
serialize()
é anterior ao JSON.Por favor! por favor! por favor! NÃO serialize dados e os coloque no seu banco de dados. A serialização pode ser usada dessa maneira, mas está faltando o ponto de um banco de dados relacional e os tipos de dados inerentes ao mecanismo de banco de dados. Fazer isso torna os dados em seu banco de dados não portáveis, difíceis de ler e podem complicar as consultas. Se você deseja que seu aplicativo seja portátil para outras linguagens, como digamos que você deseja usar Java para uma parte do aplicativo em que faz sentido usar Java, a serialização se tornará um problema nas nádegas. Você sempre deve poder consultar e modificar dados no banco de dados sem usar uma ferramenta intermediária de terceiros para manipular os dados a serem inseridos.
torna muito difícil manter código, código com problemas de portabilidade e dados que são mais difíceis de migrar para outros sistemas RDMS, novo esquema etc. Também tem a desvantagem adicional de dificultar a pesquisa no banco de dados com base em um dos os campos que você serializou.
Isso não quer dizer que serialize () é inútil. Não é ... Um bom lugar para usá-lo pode ser um arquivo de cache que contém o resultado de uma operação intensiva em dados, por exemplo. Existem muitos outros ... Só não abuse da serialização, porque o próximo cara que aparecer terá um pesadelo de manutenção ou migração.
Um bom exemplo de serialize () e unserialize () pode ser assim:
Anular a desserialização na página
fonte
Em http://php.net/manual/en/function.serialize.php :
Essencialmente, ele pega um array ou objeto php e o converte em uma string (que você pode transmitir ou armazenar como achar melhor).
Unserialize é usado para converter a string novamente em um objeto.
fonte
Basicamente, quando você serializa matrizes ou objetos, basta transformá-lo em um formato de string válido, para que você possa armazená-los facilmente fora do script php.
Nota para o objeto, você deve usar os métodos mágicos __sleep e __wakeup. __sleep é chamado por serialize (). Um método sleep retornará uma matriz dos valores do objeto que você deseja persistir.
__wakeup é chamado por unserialize (). Um método de ativação deve pegar os valores não serializados e inicializá-los no objeto.
Para passar dados entre php e js, você usaria json_encode para transformar o array php no formato json válido. Ou vice-versa - use JSON.parese () para converter um dado de saída (string) em um objeto json válido. Você gostaria de fazer isso para usar o armazenamento local. (acesso offline a dados)
fonte
Sim eu posso. Suponha que precisamos rastrear o seu sistema significa que no seu sistema há mais de um administrador e subadmin, tudo isso pode inserir, atualizar ou editar qualquer informação. Mais tarde, você precisa saber quem faz essa alteração. Para resolver esse problema, você precisa serializar.
Eu espero que isso te ajude.
fonte
fonte