PHP 5.4.36 Released

__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 3 notes

up
1
Ninsuo
15 days 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
-1
Ninsuo
15 days 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'));
    }

}
up
-25
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