• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP 魔术方法: __clone __toString

php 搞代码 3年前 (2022-01-23) 70次浏览 已收录 0个评论

从php5以后的版本,类就可以使用魔术方法了。php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开 头,除非是为了重载已有的魔术方法。

目前php已有的魔术方法有 __construct,__destruct,__call,__get,__set,__isset,__unset,__sleep,__wakeup,__toString,__set_state 和 __clone。

下面我们来看看两个魔术方法:__clone()__toString().

__clone()  - 当对象克隆的时候自动加载此方法

__toString() - 当对象需要echo打印输出的时候自动加载此方法

__clone()

<?phpclass 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;?>

结果如下

<span>1</span> --------------------------------------------------<strong style="color:transparent">¥本文来源gaodai#ma#com搞@@代~&码网^</strong><small>搞gaodaima代码</small>----------------------------------<span> I Love You So Much! </span>------------------------------------------------------------------------------------<span> no zuo no die /*要不是有__clone()这个魔术方法,这边的结果应该是2*/ </span>------------------------------------------------------------------------------------<span> I Love You So Much!</span>

php手册给了我们一个例子有些难以看懂,如下

<?phpclass 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);?>

最后的结果

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>

__toString()

<?php// Declare a simple classclass TestClass{    public $foo;    public function __construct($foo)     {        $this->foo = $foo;    }    public function __toString() {        return $this->foo;    }}$class = new TestClass('Hello');echo $class;?>

结果

Hello

以上就介绍了PHP 魔术方法: __clone __toString,包括了PHP魔术方法方面的内容,希望对PHP教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP 魔术方法: __clone __toString

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址