Nesne Dizgeleştirme

Oturumlardaki nesnelerin dizgeleştirilmesi

serialize() işlevi PHP'de saklanmış bir değerin bayt-akımı gösterimini içeren bir dizge döndürür. Özgün değişken değerlerini yeniden oluşturmak için unserialize() işlevi kullanılabilir. Bir nesneyi saklamak için dizgeleştirme kullanımı nesnenin içindeki tüm değişkenleri saklar. Nesnenin yöntemleri saklanmaz sadece sınıf ismi saklanır.

Bir nesne için unserialize() kullanabilmek için sınıf nesnesinin tanımlı olması gerekir. Yani, A sınıfının bir nesnesi varsa ve siz onu dizgeleştiriseniz, A sınıfının ismini ve içerdiği tüm değişkenlerin değerlerini içeren bir dizge alırsınız. Başka bir dosyada bu dizgeyi unserialize() ile dönüştürmek isterseniz, bu dosyada daha önce A sınıfını tanımlamış ve nesnesini oluşturmuş olmalısınız. Bu, örneğin, A sınıfının tanımını bir include dosyasında saklayıp bu dosyayı betiğinize dahil ederek veya spl_autoload_register() işlevini kullanarak yapabilirsiniz.

<?php
// classa.inc:
  
  
class {
      public 
$one 1;
    
      public function 
show_one() {
          echo 
$this->one;
      }
  }
  
// page1.php:

  
include("classa.inc");
  
  
$a = new A;
  
$s serialize($a);
  
// $s'i page2.php'nin bulabileceği bir yere sakla
  
file_put_contents('store'$s);

// page2.php:
  
  // unserialize işlevinin düzgün çalışması için gerekli
  
include("classa.inc");

  
$s file_get_contents('store');
  
$a unserialize($s);

  
// şimdi show_one() işlevini kullanabiliriz.  
  
$a->show_one();
?>

Bir uygulama oturumları kullanıyorsa ve nesneleri kaydetmek için session_register() işlevini kullanırsa, bu nesneler her PHP sayfasının sonunda otomatik olarak dizgeleştirilir ve sonraki sayfaların her birinde özdevinimli olarak nesneleştirilir. Yani, bu nesneler, oturumun bir parçası haline geldiklerinde, uygulama sayfalarının herhangi birinde görünebilir. Bununla birlikte, session_register() işlevi PHP 5.4.0'da kaldırıldı.

Bir uygulama, uygulamada daha sonra kullanmak için nesneleri dizgeleştiriyorsa, uygulamanın o nesnenin sınıf tanımını uygulama boyunca içermesi şiddetle tavsiye edilir. Bunu yapmamak, bir nesnenin sınıf tanımlaması olmaksızın nesneleştirilmesiyle sonuçlanabilir, bu da PHP'nin nesneyi hiçbir yöntemi olmayan bir __PHP_Incomplete_Class_Name sınıfına sokmasına neden olur ve sonuçta nesne işe yaramaz hale gelir.

Yani, yukarıdaki örnekte, eğer session_register("a") çalıştırarak $a bir oturumun parçası haline gelirse, classa.inc dosyasını yalnız page1.php ve page2.php dosyalarına değil tüm sayfa dosyalarına dahil etmelisiniz.

Yukarıdaki tavsiyenin ötesinde, __sleep() ve __wakeup() yöntemlerini kullanarak da bir nesne üzerinde dizgeleştirme ve yeniden nesneleştirme yapabileceğinizi unutmayın. __sleep() kullanımı ayrıca, nesne özelliklerinin tamamının değil sadece bir kısmının dizgeleştirilmesini de sağlar.