
In most of the languages we teach, data is held in memory on a "heap" with a "symbol table" holding the names of the variables, where they are stored, and what type of information the (currently) contain. When you write simple variables out to a file (or the screen) functions like
print or
puts (Tcl) format the data in such a way that it's written out in useful form. There is, however, something of a problem when you try to do that with an object. Unless it has been told, your computer doesn't know how to display or save an object in a way appropriate for its later reuse.
Saving an object to disc for later reloading
The very term "heap" should give you a clue about something. If data is stored in "a heap" then it's not going to be all neat and tidy, is it ;-) ?? It will be held in a well defined structure that makes it accessible as necessary, but thet structure will include all sorts of memory address pointers. That means that if you just store a variable's
content it won't be practical for another program to read it back later, because:
• you won't have saved the memory locations as well as the data, so the restoring program won't know what points where
• even if you had saved the memory locations, it's almost certain that when you come to restore the object there will be something else at those memory locations, or they will be within the address space of a different program.
There is often a solution provided - built in to the language - which provides you with a way of adding further information as you store your object so that you can restore it later. The generic term for this is
serialisation - which means turning the object into a stream on bytes that can be stored in a serial fashion on a disc, or indeed sent down a serial connection such as a pipe to another process, or even over a network connection to another computer.
In PHP, you can provide a method called
__serialize in your class definition which defines how an object should be formatted into a stream suitable for transfer over a serial line (where the name came from) of writing to disk, and a method called
unserialize which reverses the process.
In Java, you state that your class
implements serializable and that ensures that extra work is done within the class, and is stored. It's necessary to ensure that any classes which are used within the object are also serialisable. There's an example class (source code)
here and the code that reads and writes objects to file
here.
In Python, the
pickle,
cpickle and
marshal modules all provide ways of serialising an unserialising data. There's more on that in
a previous article
Cleaning up before you serialise
Where you have a complex object, it's likely that you'll have stored intermediate calculations within it. That's caching partly calculated results to avoid the need for repeated recalculation. But such intermediate data need not be stored, and may take up a lot of disc space, so you'll want to dump it before you save to disc or other serial stream.
In Java, you declare your variablse as
transient if you don't want to save their contents as part of the object.
In PHP, the
__sleep method which you can write performs a tidy up operation, and the
__wakeup routine can be used on reload.
(written 2009-10-04)
2d2e
Associated topics are indexed under
H108 - Objects in PHP [4073] Learning about Object Orientation in PHP - a new set of examples - (2013-04-28)
[4057] stdClass in PHP - using an object rather than an associative array - (2013-04-02)
[3953] Objects in PHP - Revision - (2012-12-16)
[3843] Caching Design Patterns - (2012-08-20)
[3841] Copying, duplicating, cloning an object in PHP - (2012-08-18)
[3840] Autoload in PHP - (2012-08-17)
[3609] How do classes relate to each other? Associated Classes - (2012-02-12)
[3608] Design Patterns - what are they? Why use them? - (2012-02-12)
[3607] Designing your application - using UML techniques - (2012-02-11)
[3211] Computer Graphics in PHP - World (incoming data) to Pixel (screen) conversion - (2011-03-24)
[3210] Catchable fatal error in PHP ... How to catch, and alternative solutions such as JSON - (2011-03-22)
[3142] Private and Public - and things between - (2011-01-22)
[2922] Getting the OO design write - with PHP a example - (2010-08-14)
[2921] Does copying a variable duplicate the contents? - (2010-08-14)
[2774] PHP - Object Oriented Design in use - (2010-05-21)
[2741] What is a factory? - (2010-04-26)
[2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
[2680] Static class members in PHP - a documented example - (2010-03-16)
[2641] Object Oriented Programming in PHP - (2010-02-19)
[2632] Shipping a test harness with your class in PHP - (2010-02-12)
[2434] Abstract classes, Interfaces, PHP and Java - (2009-10-03)
[2380] Object Oriented programming - a practical design example - (2009-08-27)
[2172] PHP4 v PHP5 - Object Model Difference - (2009-05-11)
[2171] Cleaning up redundant objects - (2009-05-11)
[2169] When should I use OO techniques? - (2009-05-11)
[2160] PHP - getclass v instanceof - (2009-05-07)
[1925] Introduction to Object Oriented Programming - (2008-12-06)
[1820] Sorting objects in PHP - (2008-10-04)
[1819] Calling base class constructors - (2008-10-03)
[1682] Accounts in PHP - an OO demo - (2008-06-19)
[1535] OO PHP demonstration - comparing objects and more - (2008-02-08)
[1217] What are factory and singleton classes? - (2007-06-04)
[1153] Object Oriented Model - a summary of changes from PHP4 to PHP5 - (2007-04-18)
[1027] Cue the music, I'm happy. - (2007-01-09)
[836] Build on what you already have with OO - (2006-08-17)
[720] Planning a hotel refurb - an example of a Gant chart in PHP - (2006-05-14)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
[421] Don't repeat code - use loops or functions - (2005-08-21)
[343] Should I use structured or object oriented? - (2005-06-10)
[205] PHP5 lets you say no - (2005-02-07)
[124] PHP v Java - (2004-11-20)
[67] Object Oriented Programming in PHP - (2004-09-29)
J809 - Java - Serialization [1149] Turning objects into something you can store - Pickling (Python) - (2007-04-15)
[1067] Serialization in Java - all layers required! - (2007-02-05)
Y115 - Additional Python Facilities [4085] JSON from Python - first principles, easy example - (2013-05-13)
[3469] Teaching dilemma - old tricks and techniques, or recent enhancements? - (2011-10-08)
[3442] A demonstration of how many Python facilities work together - (2011-09-16)
[3089] Python regular expressions - repeating, splitting, lookahead and lookbehind - (2010-12-17)
[2790] Joining a MySQL table from within a Python program - (2010-06-02)
[2786] Factory methods and SqLite in use in a Python teaching example - (2010-05-29)
[2765] Running operating system commands from your Python program - (2010-05-14)
[2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
[2746] Model - View - Controller demo, Sqlite - Python 3 - Qt4 - (2010-04-29)
[2745] Connecting Python to sqlite and MySQL databases - (2010-04-28)
[2721] Regular Expressions in Python - (2010-04-14)
[2655] Python - what is going on around me? - (2010-02-28)
[2462] Python - how it saves on compile time - (2009-10-20)
[2407] Testing code in Python - doctest, unittest and others - (2009-09-16)
[1876] Python Regular Expressions - (2008-11-08)
[1337] A series of tyre damages - (2007-09-08)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1305] Regular expressions made easy - building from components - (2007-08-16)
[1136] Buffering output - why it is done and issues raised in Tcl, Perl, Python and PHP - (2007-04-06)
[1043] Sending an email from Python - (2007-01-18)
[901] Python - listing out the contents of all variables - (2006-10-21)
[753] Python 3000 - the next generation - (2006-06-09)
[672] Keeping your regular expressions simple - (2006-04-05)
[663] Python to MySQL - (2006-03-31)
[463] Splitting the difference - (2005-10-13)
[239] What and why for the epoch - (2005-03-08)
[208] Examples - Gadfly, NI Number, and Tcl to C interface - (2005-02-10)
[183] The elegance of Python - (2005-01-19)
314a
Some other Articles
Multiple returns from a function in PythonListening to The MinisterWiltshire Unitary News - Chamber of Commerce IntelligenceMelksham Hotel Rooms - picturesSerialization - storing and reloading objectsControlling, supressing, enabling PHP error messagesUsing print_r in PHP to explore mysql database requestsMoving busstop!Not just a PHP program - a good web application