serialize
(PHP 4, PHP 5, PHP 7, PHP 8)
serialize — Bir değerin saklanabilir bir gösterimini üretir
Açıklama
PHP değerlerini, yapısını ve türünü kaybetmeden saklamak veya aktarmak için
kullanışlıdır.
Böyle bir değerden tekrar özgün değeri elde etmek için
unserialize() işlevini kullanın.
Bağımsız Değişkenler
değer
-
Dizgeleştirilecek değer. serialize() işlevi,
resource türü ve bazı nesneler hariç her türü
dizgeleştirebilir. Hatta
kendine gönderimli dizileri bile dizgeleştirebilirsiniz.
Dizgeleştirdiğiniz dizi veya nesnelerin içindeki döngüsel gönderimler
bile saklanabilir. Bunlar dışında kalan gönderimler kaybedilir.
PHP nesneleri dizgeleştirirken önce __sleep veya __serialize() üye işlevlerini
çağırmaya çalışılır. Bu işlem, nesneye dizgeleştirme öncesinde bir takım
temizlikler yapabilmesi imkanını tanır. Benzer şekilde,
unserialize() kullanılarak nesne özgün durumuna
getirilirken __unserialize()
veya __wakeup() üye işlevleri
çağrılmaya çalışılır.
Bilginize:
Nesnenin özel üyelerinin isimlerinin önünde sınıf ismi, protected
üyelerin isimlerinin önünde ise bir '*' bulunur. İsimlerin başına
getirilen bu değerler her iki tarafta null baytlarla ifade edilirler.
Dönen Değerler
Belirtilen değerin herhangi bir yerde saklanabilecek, akımlar üzerinden
aktarılabilen bir gösterimini döndürür.
Bunun ikil bir dizge oluşuna, null baytlar içerebileceğine ve ikil olarak
ele alınabileceğine dikkat ediniz. Örneğin,
serialize() çıktısının genelde bir veritabanının bir
CHAR veya TEXT alanında değil bir BLOB alanında saklanması gerekir.
Örnekler
Örnek 1 - serialize() örneği
<?php
// $session_data, geçerli kullanıcı için oturum bilgisini
// içeren çok boyutlu bir dizi içerir. İsteğin sonunda bu diziyi bir
// veritabanında saklamak için serialize() işlevini kullanacağız.
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, array_reverse($sqldata))) {
/* Birşeyler yanlış gitmiş.. */
}
}
?>
Notlar
Bilginize:
Yerleşik PHP nesenelerinin çoğunun dizgeleştirilemeyeceğine dikkar
ediniz. Bu bakımda ya Serializable arayüzü
veya sihirli __serialize()/__unserialize() veya __sleep()/__wakeup() yöntemleri kullanılarak
gerçeklenir. Dahili bir sınıf bu gereksinimleri sağlamıyorsa gerektiği
gibi dizgeleştirilemez.
Yukarıdaki kuralın geçmişten gelen bazı istisnaları olup bazı dahili
nesneler arayüz gerçeklemeden veya malum yöntemleri kullanmadan
dizgeleştirilebilir.
Uyarı
serialize() işlevi nesneleri dizgeleştirirken, azami
uyumluluğu sağlamak için isimalanlı sınıfların sınıf isimlerinin sonuna
tersbölü konmaz.