0
0
PHPprogramming~20 mins

__clone for object copying in PHP - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
PHP Clone Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of cloning with __clone method
What is the output of this PHP code when cloning an object with a __clone method that modifies a property?
PHP
<?php
class Box {
    public $size;
    public function __construct($size) {
        $this->size = $size;
    }
    public function __clone() {
        $this->size *= 2;
    }
}
$box1 = new Box(5);
$box2 = clone $box1;
echo $box1->size . ',' . $box2->size;
?>
A5,5
B10,5
C5,10
D10,10
Attempts:
2 left
💡 Hint
Remember that __clone is called only on the cloned object, not the original.
🧠 Conceptual
intermediate
1:30remaining
Effect of __clone on nested objects
If an object has a property that is another object, what happens to that nested object when the outer object is cloned using __clone?
AThe nested object is removed from the clone.
BThe nested object is also cloned automatically.
CThe nested object is converted to a string in the clone.
DThe nested object is shared between original and clone unless manually cloned in __clone.
Attempts:
2 left
💡 Hint
Think about shallow vs deep copy.
🔧 Debug
advanced
2:30remaining
Why does cloning not duplicate nested objects?
Given this code, why does changing the nested object's property in the clone affect the original's nested object?
PHP
<?php
class Inner {
    public $value;
    public function __construct($v) {
        $this->value = $v;
    }
}
class Outer {
    public $inner;
    public function __construct() {
        $this->inner = new Inner(10);
    }
    public function __clone() {
        // no cloning of inner
    }
}
$a = new Outer();
$b = clone $a;
$b->inner->value = 20;
echo $a->inner->value;
?>
ABecause PHP does not allow cloning nested objects.
BBecause __clone does not clone the nested Inner object, so both share the same Inner instance.
CBecause the Outer class constructor is called again on clone.
DBecause the Inner object is immutable.
Attempts:
2 left
💡 Hint
Check what __clone does with nested objects.
📝 Syntax
advanced
1:30remaining
Identify the syntax error in __clone method
Which option contains a syntax error in the __clone method?
PHP
class Sample {
    public $data;
    public function __clone() {
        // code here
    }
}
Apublic function __clone { $this->data = clone $this->data; }
Bpublic function __clone() { $this->data = clone $this->data; }
Cpublic function __clone() { $this->data = $this->data; }
D} ;atad>-siht$ enolc = atad>-siht$ { )(enolc__ noitcnuf cilbup
Attempts:
2 left
💡 Hint
Check the function declaration syntax carefully.
🚀 Application
expert
3:00remaining
How to implement deep cloning with __clone
Given a class with multiple nested objects, how should you implement __clone to ensure a deep copy of all nested objects?
AManually clone each nested object inside __clone, e.g., $this->nested = clone $this->nested; for each property.
BAssign nested objects to null inside __clone to avoid sharing.
CUse PHP's built-in deep clone function automatically called on clone.
DDo nothing; PHP clones nested objects by default.
Attempts:
2 left
💡 Hint
PHP cloning is shallow by default.