时间:2021-07-01 10:21:17 帮助过:8人阅读
下面我们来看看两个魔术方法:__clone()和__toString().
__clone() - 当对象克隆的时候自动加载此方法
__toString() - 当对象需要echo打印输出的时候自动加载此方法
__clone()
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 '
';
echo $b->pb;
echo '
';
echo $c->pb;
echo '
';
echo $b->pb;
?>
结果如下
1 ------------------------------------------------------------------------------------ I Love You So Much! ------------------------------------------------------------------------------------ no zuo no die /*要不是有__clone()这个魔术方法,这边的结果应该是2*/ ------------------------------------------------------------------------------------ I Love You So Much!
php手册给了我们一个例子有些难以看懂,如下
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);
?>
最后的结果
Original Object: MyCloneable Object ( [object1] => SubObject Object ( [instance] => 1 ) [object2] => SubObject Object ( [instance] => 2 ) ) Cloned Object: MyCloneable Object ( [object1] => SubObject Object ( [instance] => 3 /*可能这里比较难以理解,其实就是$obj2当克隆的时候将最后的instance为2的结果克隆,并且再执行SubObject::__clone方法*/ ) [object2] => SubObject Object ( [instance] => 2 ) )
__toString()
foo = $foo;
    }
    public function __toString() {
        return $this->foo;
    }
}
$class = new TestClass('Hello');
echo $class;
?>
结果
Hello
以上就介绍了PHP 魔术方法: __clone __toString,包括了PHP魔术方法方面的内容,希望对PHP教程有兴趣的朋友有所帮助。