Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Zaubermethode: __clone __toString

PHP-Zaubermethode: __clone __toString

WBOY
Freigeben: 2016-08-08 09:33:11
Original
1156 Leute haben es durchsucht

Ab PHP5 und späteren Versionen können Klassen magische Methoden verwenden. PHP legt fest, dass Methoden, die mit zwei Unterstrichen (__) beginnen, als magische Methoden reserviert sind. Daher wird empfohlen, dass Funktionsnamen nicht mit __ beginnen, es sei denn, dies dient dazu, vorhandene magische Methoden zu überlasten.

Zu den vorhandenen magischen Methoden in PHP gehören __construct, __destruct, __call, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __set_state und __clone.

Werfen wir einen Blick auf zwei magische Methoden: __clone() und __toString().

__clone() – Diese Methode wird automatisch geladen, wenn das Objekt geklont wird

__toString() – Diese Methode wird automatisch geladen, wenn das Objekt einen Echoausdruck benötigt

__Klon()

<?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;
?>
Nach dem Login kopieren

Die Ergebnisse sind wie folgt

<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>
Nach dem Login kopieren

Das PHP-Handbuch gibt uns ein etwas schwer verständliches Beispiel wie folgt:

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

?>
Nach dem Login kopieren

Endergebnis

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>
Nach dem Login kopieren

__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;
?>
Nach dem Login kopieren

Ergebnis

Hello
Nach dem Login kopieren

Das Obige stellt die PHP-Magic-Methode vor: __clone __toString, einschließlich des Inhalts der PHP-Magic-Methode. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage