unserialize
(PHP 3 >= 3.0.5, PHP 4, PHP 5)
unserialize -- 保存用表現から PHP の値を生成する
説明
mixed
unserialize
( string str )
unserialize()
は、シリアル化された変数 (
serialize()
を参照) をとり、PHP 変数値に 戻す変換を行います。変換された値が返されます。その値は、
boolean
,
integer
,
float
,
string
,
array
,
object
とすることが可能です。オブジェクトがシリアル化された場合、返り値 にそのメソッドは保存されていません。
E_NOTICE
が発生した場合、
FALSE
を返します。
|
警告
|
|
エラーやシリアライズされた
FALSE
値をアンシリアライズする場合、
FALSE
が返されます。この特殊なケースは
str
を
serialize(false)
で比較する、もしくは
E_NOTICE
をキャッチすることで区別することができます。
|
unserialize_callback_func ディレクティブ:
コールバック関数を設定することが可能です。(不完全な
object
"__PHP_Incomplete_Class"を得ることを防ぐため) コールバック関数は、非シリアル化する際に未定義のクラスをインスタ ンス化する必要がある場合にコールされます。 'unserialize_callback_func'を定義するためには、
php.ini
,
ini_set()
,
.htaccess
を使用し てください。未定義のクラスをインスタンス化する度に、コールバック関 数がコールされます。この機能を無効とするには、 単純にこの設定を空にしてください。また、ディレクティブ unserialize_callback_func は PHP 4.2.0 で利用可能になったことに注意してください。
もしアンシリアライズサル変数がオブジェクトの場合、 オブジェクトが無事再作成された後、PHP は自動的にメンバー関数
__wakeup()
(存在していれば) をコールしようとします。
例 1. unserialize_callback_funcの例
<?php
$serialized_object
=
'O:1:"a":1:{s:5:"value";s:3:"100";}'
;
// unserialize_callback_func ディレクティブは PHP 4.2.0 以降で利用可能
ini_set
(
'unserialize_callback_func'
,
'mycallback'
);
// 独自のコールバック関数を設定する
function
mycallback
(
$classname
)
{
// just include a file containing your classdefinition
// you get $classname to figure out which classdefinition is required
}
?>
|
|
注意:
PHP 3では、メソッドはシリアル化されたオブジェクトを非シリアル化 する際に保存されません。PHP 4ではこの制限は取り除かれ、プロパティ とメソッドの両方を保存します。より詳細な情報については、
オブジェクトとクラス
の
オブジェクトのシリア ル化
の節を参照ください。
例 2.
unserialize()
の例
<?php
// ここで、データベースから $session_data にセッションデータをロード
// するために unserialize() を使用します。
// この例は、<function>serialize</function> で記述された例を補足するものです。
$conn
=
odbc_connect
(
"webdb"
,
"php"
,
"chicken"
);
$stmt
=
odbc_prepare
(
$conn
,
"SELECT data FROM sessions WHERE id = ?"
);
$sqldata
= array (
$PHP_AUTH_USER
);
if (!
odbc_execute
(
$stmt
, &
$sqldata
) || !
odbc_fetch_into
(
$stmt
, &
$tmp
)) {
// 実行または取得が失敗した場合、空の配列で初期化します
$session_data
= array();
} else {
// tmp[0] にシリアル化されたデータを保持している必要があります。
$session_data
=
unserialize
(
$tmp
[
0
]);
if (!
is_array
(
$session_data
)) {
// 何か問題があったため、空の配列で初期化します。
$session_data
= array();
}
}
?>
|
|
serialize()
も参照ください。