Home > Backend Development > PHP Tutorial > PHP magic method __clone __toString(5), __clone__tostring_PHP tutorial

PHP magic method __clone __toString(5), __clone__tostring_PHP tutorial

WBOY
Release: 2016-07-13 10:13:06
Original
935 people have browsed it

PHP magic methods __clone __toString(5), __clone__tostring

__clone()  - This method is automatically loaded when the object is cloned

__toString() - This method is automatically loaded when the object needs echo printout

__clone()

<?php
class example{
    public static $pa;
    public $pb;
    public function __construct(){
        $this->pb = ++self::$pa;
    }
    
    public function __clone(){
        $this->pb = 'no zuo no die';
    }
}

$a = new example;
$b = new example;
$c = clone $b;
$b->pb = 'I Love You So Much!';

echo $a->pb;
echo '<hr/>';
echo $b->pb;
echo '<hr/>';
echo $c->pb;
echo '<hr/>';
echo $b->pb;
?>
Copy after login

The results are as follows

<span>1</span>
------------------------------------------------------------------------------------<span>
I Love You So Much!
</span>------------------------------------------------------------------------------------<span>
no zuo no die /*要不是有__clone()这个魔术方法,这边的结果应该是2*/
</span>------------------------------------------------------------------------------------<span>
I Love You So Much!</span>
Copy after login

The PHP manual gives us an example that is somewhat difficult to understand, as follows

<?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()
    {
      
        // 强制复制一份this->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);

?>
Copy after login

Final result

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

    [object2] </span>=> SubObject <span>Object</span><span>
        (
            [instance] </span>=> <span>2</span><span>
        )

)
Cloned </span><span>Object</span><span>:
MyCloneable </span><span>Object</span><span>
(
    [object1] </span>=> SubObject <span>Object</span><span>
        (
            [instance] </span>=> <span>3  <span>/*可能这里比较难以理解,其实就是$obj2当克隆的时候将最后的instance为2的结果克隆,并且再执行SubObject::__clone方法*/</span></span><span>
        )

    [object2] </span>=> SubObject <span>Object</span><span>
        (
            [instance] </span>=> <span>2</span><span>
        )

)</span>
Copy after login

__toString()

<?php
// Declare a simple class
class TestClass
{
    public $foo;

    public function __construct($foo) 
    {
        $this->foo = $foo;
    }

    public function __toString() {
        return $this->foo;
    }
}

$class = new TestClass('Hello');
echo $class;
?>
Copy after login

Result

Hello
Copy after login

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/917481.htmlTechArticlePHP magic method __clone __toString(5), __clone__tostring __clone() - This method is automatically loaded when the object is cloned __toString() - automatically added when the object needs echo printout...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template