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/