__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 1 note

up
-19
ranware2200 at yahoo dot com
3 years ago
This is a simple example of how to implement serialization using the __sleep and __wakeup magic methods...

<?php
//student.class.php
class Student{
    private
$full_name = '';
    private
$score = 0;
    private
$grades = array();
   
    public function
__construct($full_name, $score, $grades)
    {
       
$this->full_name = $full_name;
       
$this->grades = $grades;
       
$this->score = $score;
    }
   
    public function
show()
    {
        echo
$this->full_name;
    }
   
    function
__sleep()
    {
        echo
'Going to sleep...';
        return array(
'full_name', 'grades', 'score');
    }
   
    function
__wakeup()
    {
        echo
'Waking up...';
    }
}
?>

<?php
//a.php
include 'student.class.php';

$student = new Student('bla bla', 'a', array('a' => 90, 'b' => 100));
$student->show();
echo
"<br />\n";
$s = serialize($student);
echo
$s ."<br />\n";
$fp = fopen('./uploads/session.s', 'w');
fwrite($fp, $s);
fclose($fp);
?>

<?php
//b.php
include 'student.class.php';

$s = implode('', file("./uploads/session.s"));
echo
$s ."<br />\n";
$a = unserialize($s);
$a->show();
?>
To Top