-3

このコードで混乱しました

<?php

$input = 'O:1:"B":1:{s:6:"secret";s:6:"Got_it";}';
$o = unserialize($input);
//echo $o;  
print_r($o->secret);

?>

$o->secret を取得しようとしましたが、次のエラーが発生しました:

Notice: main(): スクリプトがメソッドを実行しようとしたか、不完全なオブジェクトのプロパティにアクセスしようとしました。unserialize() が呼び出される前に、操作しようとしているオブジェクトのクラス定義「B」がロードされていることを確認する か、__autoload() 関数を提供して /home/mikun/public_html/tested.php のクラス定義をロードしてください。 6行目

それを解決するのを手伝ってください!

4

2 に答える 2

4

あなたのコードは class のオブジェクトをシリアル化解除していますB

$input = 'O:1:"B":1:{s:6:"secret";s:6:"Got_it";}';
               ^

BPHPは、クラスがどのように見えるべきかを認識していない限り、オブジェクトをアンシリアライズできません。したがって、最初に定義が必要です。この場合、呼び出しのB 前にクラス定義を指定する必要があります。unserialize()例えば:

class B {
    public $secret;
    public $param2;
};

$input = 'O:1:"B":1:{s:6:"secret";s:6:"Got_it";}';
$o = unserialize($input);
//$o is now an instance of class B
print_r($o->secret); //prints "Got_it"
于 2013-06-28T17:52:38.827 に答える
1

データを構造化するために B クラスが必要ない場合は、クラス B を編集して stdClass にすることで、シリアル化された文字列を修正できます。そうするためにあなたは変わるでしょう

O:1:"B":1:{s:6:"secret";s:6:"Got_it";}

O:8:"stdClass":1:{s:6:"secret";s:6:"Got_it";}

O:1になることがわかりますO:8。これは、オブジェクト名の長さが 8 文字になったことを php に伝えていますstdClass

于 2013-06-28T18:16:43.907 に答える