Objektserialisering: Skillnad mellan sidversioner
Admin (diskussion | bidrag) (Skapade sidan med '== 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....') |
Admin (diskussion | bidrag) Ingen redigeringssammanfattning |
||
| Rad 1: | Rad 1: | ||
== Serialisering av objekt - objekt i sessioner == | == 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. | 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()`. | 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()]]`. | ||
<pre> | <pre> | ||
Nuvarande version från 19 augusti 2024 kl. 05.44
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/