PHP Velho Oeste 2024

Nesneleri Dizgeleştirme - Oturum nesneleri

serialize() işlevi PHP'de saklanabilen her değerin bayt dizisi gösterimini içeren bir dizge ile döner. Bu dizgeden tekrar özgün değeri elde etmek için unserialize() işlevi kullanılır. Bir nesnenin dizgeleştirilerek kaydedilmesi halinde sınıfın ismi ve nesne içindeki tüm değişkenler kaydedilecek fakat nesnenin işlevleri kaydedilmeyecektir.

Bir nesnenin unserialize() ile geri alınabilmesi için bu nesnenin oluşturulduğu sınıfın tanımlı olması gerekir. Örneğin, sayfa1.php dosyasında A sınıfının $a nesnesini dizgeleştirdiğinizde $a nesnesinin içerdiği tüm değişkenlerin değerleri ile A sınıfının ismini kaydetmiş olursunuz. Bu dizgeyi sayfa2.php içinde yeniden nesneleştirmek isterseniz A sınıfının sayfa2.php içinde tanımlı olması gerekir. Bunu A sınıfının tanımını ayrı bir dosyada tutup bu dosyayı sayfa1.php ve sayfa2.php dosyalarına dahil ederek kolayca gerçekleştirebilirsiniz.

<?php
// sınıfa.inc:

  
class {
      var 
$bir 1;

      function 
bir_göster() {
          echo 
$this->bir;
      }
  }

// sayfa1.php:

  
include("sınıfa.inc");

  
$a = new A;
  
$s serialize($a);
  
// $s dizgesini sayfa2.php'nin bulabileceği bir yere koyalım
  
$fp fopen("depo""w");
  
fwrite($fp$s);
  
fclose($fp);

// sayfa2.php:

  // yeniden nesneleştirme bunun içerilmesini gerektirir
  
include("sınıfa.inc");

  
$s implode("", @file("depo"));
  
$a unserialize($s);

  
// artık $a nesnesinin bir_göster işlevini kullanabiliriz
  
$a->bir_göster();
?>

Oturumları kullanıyorsanız ve nesneleri kaydetmek için session_register() işlevini kullanıyorsanız, her PHP sayfasının sonunda bu nesneler özdevinimli olarak dizgeleştiriler ve sonraki sayfalarda yine özdevinimli olarak nesneleştirilirler. Yani, bu nesnelerin sayfalarınızda bir kere görünmesi oturumunuzun birer parçası haline gelmeleri için yeterlidir.

Bu bakımdan, hepsini bütün sayfalarda kullanmayacak olsanız bile bu tür kayıtlı nesnelerin sınıf tanımlarını her sayfaya mutlaka dahil etmenizi öneririz. Bunu yapmazsanız ve bir nesnenin dizgesi sınıf tanımı olmaksızın nesneleştirilirse sınıfla ilişkisi kaybolur ve hiçbir işlevi olmayan __PHP_Incomplete_Class_Name sınıfının bir nesnesi haline gelerek işe yaramaz hale gelir.

Dolayısıyla, yukarıdaki örnekteki $a nesnesini, session_register("a") işleviyle bir oturumun parçası haline getirirseniz sınıfa.inc dosyasını sadece sayfa1.php ve sayfa2.php dosyalarına değil oturumun tüm dosyalarına dahil etmeniz gerekir.

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top