Object cloning

Object cloning

Creating a copy of an object with fully replicated properties is not always the wanted behavior. A good example of the need for copy constructors, is if you have an object which represents a GTK window and the object holds the resource of this GTK window, when you create a duplicate you might want to create a new window with the same properties and have the new object hold the resource of the new window. Another example is if your object holds a reference to another object which it uses and when you replicate the parent object you want to create a new instance of this other object so that the replica has its own separate copy.

An object copy is created by using the clone keyword (which calls the object's __clone() method if possible). An object's __clone() method cannot be called directly.

$copy_of_object = clone $object;

When an object is cloned, PHP 5 will perform a shallow copy of all of the object's properties. Any properties that are references to other variables, will remain references. If a __clone() method is defined, then the newly created object's __clone() method will be called, to allow any necessary properties that need to be changed.

Example 19-31. Cloning an object

<?php
class SubObject
{
    static
$instances = 0;
    
public $instance;

    
public function __construct() {
        
$this->instance = ++self::$instances;
    }

    
public function __clone() {
        
$this->instance = ++self::$instances;
    }
}

class
MyCloneable
{
    
public $object1;
    
public $object2;

    function
__clone()
    {
        
// Force a copy of this->object, otherwise
        // it will point to same object.
        
$this->object1 = clone($this->object1);
    }
}

$obj = new MyCloneable();

$obj->object1 = new SubObject();
$obj->object2 = new SubObject();

$obj2 = clone $obj;


print(
"Original Object:\n");
print_r($obj);

print(
"Cloned Object:\n");
print_r($obj2);

?>

The above example will output:

Original Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 1
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
Cloned Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 3
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)


Links
Bluehost $6.95/mo
  • 50GB Diskspace
  • 999GB Bandwidth
  • Host 6 Domains
  • CGI Ruby(RoR) Perl PHP MySQL PostgreSQL
  • Support Custom PHP.INI
  • SSH SSL FTP Stats
  • Free Domain Forever
  • 27/7 Support

Apollo Hosting $6.96/mo
  • 3GB Diskspace
  • 100GB Bandwidth
  • Live 24/7 Support
  • SpamAssassin
  • Urchin Web Analytics

HostGator $9.95/mo
  • 100GB Diskspace
  • 1000GB Bandwidth
  • Host Unlimited Domains
  • CPanel
  • PHP CGI SSH SSI
  • Instant Backups
  • 99.9% Uptime Guarantee
  • 30 Day Money Back

Hosting Companies


Partners


Quick Search
Platform

Price

Diskspace

Bandwidth


 Advance Search
 Show All Companies


Reference & Manual

If you are looking for dedicated servers, look no further. HostPulse.com is a site devoted to help web users find cheap web hosting and dedicated servers.


Free Sitemap Generator Host Login/Register | Contact Us | Terms | Add Links
Thumbnails by Thumbshots.org © 2002-2008 CheapHostDir.com