PHP Velho Oeste 2024

__sleep ve __wakeup sihirli işlevleri

serialize() işlevi sınıfınızın __sleep adında sihirli bir işlev içerip içermediğine bakar. Varsa, her dizgeleleştirme öncesi bu işlev çalıştırılır. Bu işlevin nesneyi temizleyip, dizgeleştirilecek nesnenin tüm değişken isimlerini içeren bir dizi döndürmesi beklenir. Eğer işlev dizgeleştirme sonucunda NULL'dan başka birşey döndürmüyorsa bir E_NOTICE çıktılanır.

__sleep işlevinden beklenen, askıdaki veriyi teslim etmesi ve bazı temizlik işlemleri yapmasıdır. İşlev, tamamen kaydedilmesi gereken çok büyük nesneler için de ayrıca kullanışlıdır.

unserialize() işlevi ise tersine __wakeup adında bir sihirli işlevin varlığına bakacaktır. Varsa, bu işlev nesnenin sahip olduğu özkaynakların hepsini yeniden oluşturacaktır.

__wakeup işlevinden beklenen, nesneleştirme sırasında kaybedilen veritabanı bağlantılarını yeniden oluşturmak ve diğer ilklendirmeleri yeniden yapmaktır.

add a note add a note

User Contributed Notes 2 notes

up
21
Ninsuo
9 years ago
If you want to serialize all but one properties, you can use:

<?php

class A
{

   protected
$a = 1;
   protected
$b = 2;
   protected
$c = 3;
   protected
$d = 4; // unwanted

   
public function __sleep()
    {
        return
array_diff(array_keys(get_object_vars($this)), array('d'));
    }
   
}
up
-25
Ninsuo
9 years ago
If you want to serialize all but one properties, you can use:

<?php

class MyClass
{
   protected
$a;
   protected
$b;
   protected
$c;
   protected
$d; // unwanted

   
public function __sleep()
    {
        return
array_diff(get_object_vars($this), array('d'));
    }

}
To Top