"אובייקטים בהמשכים" - אובייקטים ב session

הערה : ב PHP 3 , אוביקטים יאבדו את השיוך למחלקה שלהם במהלך התהליך של " פרסום בהמשכים " (serializatio ) ו "אי פרסום בהמשכים " (unserialization) . התוצאה היא משתנה מסוג אובייקט , אבל ללא מחלקה וללא מתודות (פונקציות של המחלקה) , לכן זה ממש לא שימושי (זה למעשה נהיה ממש כמו מערך עם תחביר משעשע ) .

זהירות

המידע בהמשך תקף ל - PHP 4 בלבד .

serialize( ) מחזיר מחרוזת שמכילה "שטף בתים " שמייוצגות על ידי ערך כלשהו שיכול להיות שמור ב PHP . unserialize( ) משתמשים במחרוזת זו ליצירה מחדש של הערכים המקורים של משתנה . שימוש ב serialize לשמרית האובייקט תשמור תשמור את כל המשתנים שבאובייקט . הפונקציות שבאובייקט לא ישמרו , רק השם של המחלקה הוא זה שישמר .

על מנת להשתמש ב unserialize( ) על אובייקט , המחלקה של אותו אובייקט צריכה להיות ממומשת . ולפיכך , אם יש את האובייקט $a של המחלקה A שבדף page1.php ובוצע serialize עליה , תתקבל מחרוזת שתייחס למחלקה A ואשר תכיל את כל הערכים של המשתנים הקיימים $a . כשיש צורך להשתמש ב unserialize שב page2.php , יצירה מחדש של הובייקט $a של המחלקה A , ההגדקה של המחלקה A חייבת להיות מיוצגת ב - page2.php . זה יכול להעשות לדוגמא על ידי איכסון של הגדרת המחלקה A בתוך קובץ מוכלל והכללת קובץ זה גם ב page1.php וגם ב page2.php .

 
classa.inc

 
:

 
class

 
A

 
{

 
var

 
$one

 
=

 
1

 
;

 
function

 
show_one(

 
)

 
      {

 
echo

 
$this

 
-

 
one

 
;

 
      }

 
  }

 
page1.php

 
:

 
include("classa.inc")

 
;

 
$a

 
=

 
new

 
A

 
;

 
$s

 
=

 
serialize($a)

 
;

 
/

 
/

 
איכסון

 
$s

 
במקום

 
כשלהו

 
כש

 
page2.php

 
יכול

 
למצוא

 
אותו

 
.

 
$fp

 
=

 
fopen("store"

 
,

 
"w")

 
;

 
fputs($fp

 
,

 
$s)

 
;

 
fclose($fp)

 
;

 
page2.php

 
:

 
/

 
/

 
זה

 
נדרש

 
על

 
מנת

 
לבצע

 
unserialize

 
בצורה

 
הנכונה

 
.

 
include("classa.inc")

 
;

 
$s

 
=

 
implode(""

 
,

 
@file("store"))

 
;

 
$a

 
=

 
unserialize($s)

 
;

 
/

 
/

 
עכשיו

 
הפונקציה

 
show_one(

 
)

 
בשימוש

 
של

 
האובייקט

 
$a

 
.

 
$a

 
-

 
show_one()

 
;



אם אתה משתמש ב session ומשתמש ב session_register( ) על מנת לאגור משתנה , אובייקטים אלו באופן אוטומטי serialized בסוף כל עמוד PHP , והם unserialized אוטומטית באחד מכל הדפים הבאים . הכוונה הבסיסית היא שהאובייקט יכול להופיע בדף כלדשהו ברגע שהם הופעים להיות חלק מתוך ה session .

מאוד מומלץ להכליל את הגדרת המחלקה של כל האובייקטים המוזמנים של כל אותם דפים , גם אם אתה לא באמת משתמש באותם מחלקות בכל אותם דפים . אם אתה לא משתמש באובייקט הוא unserialized ללא הגדרת המחלקה הנוכחית , הוא יאבד את השיוך למחלקה ויהפוך לאובייקט של המחלקה stdClass ללא פונקציה כשלהי שמתקיימת בכלל , לפיכך , הוא יהפך ללא שימושי כלל .

אם בדוגמא שמעל $a הופך לחלק מ session עךל ידי שימוש ב session_register( "a" ) , יש צורך להכליל את הקובץ classa.inc בכל הדפים , לא רק בדפים page1.php ו page2.php .