Objektserialisering

Från Wiki.linux.se
Version från den 19 augusti 2024 kl. 05.44 av Admin (diskussion | bidrag)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

Serialisering av objekt - objekt i sessioner

Funktionen `serialize()` returnerar en sträng som innehåller en byte-strömrepresentation av vilket värde som helst som kan lagras i PHP. Funktionen `unserialize()` kan använda denna sträng för att återskapa de ursprungliga variabelvärdena. När man använder `serialize` för att spara ett objekt, kommer alla variabler i objektet att sparas. Metoderna i objektet kommer inte att sparas, endast namnet på klassen.

För att kunna använda `unserialize()` på ett objekt måste klassen för det objektet vara definierad. Det vill säga, om du har ett objekt av klass A och serialiserar detta, får du en sträng som hänvisar till klass A och innehåller alla värden av de variabler som ingår i den. Om du vill kunna unserialisera detta i en annan fil, ett objekt av klass A, måste definitionen av klass A finnas med i den filen först. Detta kan göras till exempel genom att lagra klassdefinitionen för klass A i en inkluderad fil och inkludera denna fil, eller genom att använda funktionen `spl_autoload_register()`.

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

include "A.php";

$a = new A;
$s = serialize($a);
// lagra $s någonstans där page2.php kan hitta det.
file_put_contents('store', $s);

// page2.php:

// detta behövs för att unserialize ska fungera korrekt.
include "A.php";

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

// använd nu funktionen show_one() för $a-objektet.  
$a->show_one();
?>

Det rekommenderas starkt att om en applikation serialiserar objekt för att använda senare i applikationen, att applikationen inkluderar klassdefinitionen för det objektet genom hela applikationen. Om detta inte görs kan det resultera i att ett objekt unserialiseras utan en klassdefinition, vilket kommer att resultera i att PHP ger objektet en klass av typen `__PHP_Incomplete_Class_Name`, som inte har några metoder och därmed gör objektet oanvändbart.

Så om i exemplet ovan `$a` blev en del av en session genom att lägga till en ny nyckel till superglobala arrayen `$_SESSION`, bör du inkludera filen `A.php` på alla dina sidor, inte bara `page1.php` och `page2.php`.

Utöver ovanstående råd bör du notera att du också kan koppla in dig på serialiserings- och unserialis


Sidslut

Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.oop5.serialization.php
PHP
Språkreferens
Språkreferens#Klasser_och_Objekt


Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/