2017-12-19 7 views
0

私はPHP 7.1.12を使用していると私はPHP serialize()PHP開発者として、serialize()が値の保存可能な表現を生成する方法を理解する必要がありますか?

で最も重要な組み込み関数の一つの機能を理解しようとしている私は、serialize()がの保存可能な表現を生成するために使用されていることがわかりますそれに渡される値。

serialize()は、受信した値を内部機能を使用して文字列に変換することを意味します。これは私の知覚がserialize()の権利ですか?私は手紙が私は、Rがに来ているところから理解できないんだけど、出力では

a: a:1:{i:0;a:0:{}} 
b: a:1:{i:0;a:1:{i:0;R:2;}} 

<?php 

$a = []; 
$a[] = $a; 
echo "\na: ".serialize($a); 

$b = []; 
$b[] =& $b; 
echo "\nb: ".serialize($b); 

出力:

はコードの下に考えてみましょう出力。また、私はこの出力がどのように形成されているのか理解できません。serialize()

私の質問は次のとおりです。 PHP開発者としては、上記の出力を理解する必要がありますか、それともその出力に直接触れることなく直接使用する必要がありますか?

この点について私を案内してください。

+1

まあ、出力はバイトストリーム表現を含む文字列です。それをPHPで再び使用できるようにするには、まずそれを 'unserialize()'しなければなりません。あなたは[ここ](http://php.net/manual/en/function.serialize.php)を見ましたか? – Geshode

+0

@Geshode:私はとてもよく知っています。私の質問はなぜではなく、serialize()とunserialize()の使い方ではありません。私の質問は、serialize()が生成する出力を理解する必要性に関するものです。 – SerialKisser

+0

表現がどれだけ正確に生成されているか知っていなければならないのですか? – Geshode

答えて

2

以下は、これらの文字が意味するものの一般的な説明です。

文字列

s:size:value; 

i:value; 

ブール整数

b:value; (store '1' or '0') 

ヌル

N; 

アレイ

a:size:{key definition;value definition;(repeated per element)} 

オブジェクトが

O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)} 

PHPのシリアライズどのように、私たちが知っているために本当に必要はありませんが、ある場合には興味があります上記の説明は、そこに何らかの論理があることを理解するのに役立ちます。私はこれが役立つことを願っています

+0

答えのおかげでありがとう。値をシリアル化()して値をunserialize()する理由を教えてください。データベースに格納されているものを保存することはできません。 – SerialKisser

+0

理想的には、キャッシュ用にデータをシリアル化します。つまり、複雑なビジネスプロセスがあるとしましょう。常に一定のデータを返し、このデータはあまり変化しません。理想的には、この状況では、必要に応じて、シリアル化されたデータを15分〜1日の間キャッシュします。したがって、次のリクエストが来たら、複雑なプロセスを再度実行するのではなく、データのシリアル化を解除するだけで、ページの読み込みが高速になります。したがって、ほとんどの場合適用可能です。 – ksoni

+0

シリアライズされたデータをデータベースに格納することは理想的ではありませんが、ファイルシステム上に格納することはお勧めしません。 – ksoni

1

PHPのシリアライズフォーマットのもう一つの特徴は、リファレンスを適切に保存することです。ここで重要な部分はR:2です。素子。これは「第2の値への参照」を意味します。リファレンスのような動作のシリアル化も二度発生し、同じオブジェクトが本当にアンシリアライズで同じオブジェクトになることを確実にするPHPの展示にオブジェクトとして :

$b = []; 
$b[] =& $b; 
echo "\nb: ".serialize($b); 

output:b: a:1:{i:0;a:1:{i:0;R:2;}} 

、アレイ全体が第1の値は、最初のインデックスは、 2番目の値は参照される値です。

関連する問題