2017-09-15 7 views
0

Stack Overflowのおかげで、PHPでserialize()とunserialize()が何をしているのか分かりました。PHPのシリアル化による文字列の解釈

私はPHP.net Manualにこのコード例に出くわした:

class obj implements Serializable { 
private $data; 
public function __construct() { 
    $this->data = "My private data"; 
    } 
public function serialize() { 
    return serialize($this->data); 
} 
public function unserialize($data) { 
    $this->data = unserialize($data); 
} 
public function getData() { 
    return $this->data; 
} 
} 

$obj = new obj; 
$ser = serialize($obj); 

var_dump($ser); 

$newobj = unserialize($ser); 

var_dump($newobj->getData()); 

コードは以下の結果生成:

string(38) "C:3:"obj":23:{s:15:"My private data";}" 
string(15) "My private data" 

を私は「C」は、この文字列を意味し、なぜそれが等しいかを知りたいです「3」と「obj」、なぜ「23」に等しいのか

"s"は文字列を意味し、15文字を含んでいますが、Cとobjとその結果は理解できません。

答えて

3

PHPのシリアライズフォーマットは、何かを宣言し、それに続く文字の数を宣言することに多く基づいています。したがって、Cclassを意味します。3は、次の3文字がどのクラスかを教えてくれることを意味します。objは、クラス名を示す3文字です。23は、次の23文字がオブジェクトのデータを記述します。休息は自明です。

+2

を有し、 'C'手段それは 'Serializable'インタフェースを実装するクラスです。他のクラスは代わりに 'O'でシリアライズされます。 – salathe

1

C =クラス

3 - "OBJ" は3つの文字

23は - 理由{S:15: "私のプライベートデータを";}具体的に23文字

関連する問題