16.__toString()-Methode
Wir haben bereits erwähnt, dass die Methode zum Deklarieren eines Methodennamens, der mit „-“ in der Klasse beginnt (von PHP bereitgestellt), unter verschiedenen Umständen zu einem bestimmten Zeitpunkt automatisch ausgeführt wird
Beim Aufruf der Ausführungsmethode wird automatisch auch die Methode „__toString()“ aufgerufen. Sie wird automatisch aufgerufen, wenn
die Objektreferenz direkt ausgibt, zum Beispiel: „$p =new „
Person()“, $p ist eine Referenz. Wir können echo nicht verwenden, um $p direkt auszugeben. Dies wird einen Fehler wie „Abfangbarer schwerwiegender
Fehler: Objekt der Klasse Person konnte nicht konvertiert werden“ ausgeben to string“. Wenn Sie die Methode
„__toString()“ in der Klasse definieren, wird bei der direkten Ausgabe der Objektreferenz kein Fehler generiert. Stattdessen wird die Methode
„__toString()“ automatisch aufgerufen und „__toString() wird ausgegeben. )“-Methode, daher muss die „__toString()“-Methode
einen Rückgabewert (Return-Anweisung) haben.
Codeausschnitt
<?php // Declare a simple class class TestClass{ public $foo; public function __construct($foo) { $this->foo = $foo; } //定义一个__toString方法,返加一个成员属性$foo public function __toString() { return $this->foo; } } $class = new TestClass('Hello'); //直接输出对象 echo $class; ?>
Ausgabe des obigen Beispiels: Hallo
17. Objekt klonen
Manchmal müssen wir zwei oder mehr identische Objekte in einem Projekt verwenden Mit dem Schlüsselwort „new“
können Sie ein Objekt neu erstellen und ihm dann dieselben Attribute zuweisen. Dies ist umständlicher und fehleranfälliger, daher ist es sehr nützlich, ein identisches Objekt basierend auf einem Objekt vollständig zu klonen. und nach dem Klonen stören sich die beiden Objekte
nicht gegenseitig.
In PHP5 verwenden wir das Schlüsselwort „clone“, um Objekte zu klonen;
Codefragmente
<? class Person{ //下面是人的成员属性 var $name; //人的名子 var $sex; //人的性别 var $age; //人的年龄 //定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值 function __construct($name="", $sex="", $age=""){ $this->name=$name; $this->sex=$sex; $this->age=$age; } //这个人可以说话的方法, 说出自己的属性 function say() { echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>"; } } $p1=new Person("张三", "男", 20); //使用“clone”克隆新对象p2,和p1对象具有相同的属性和方法。 $p2=clone $p1; $p2->say(); ?>
Mit der Methode „__clone()“ ein Objekt mit denselben Eigenschaften und Methoden wie das Originalobjekt erstellt wird. Wenn Sie den Inhalt des
Originalobjekts nach dem Klonen ändern möchten, können Sie Folgendes tun: Sie müssen verwenden __clone() Schreiben Sie die ursprünglichen Eigenschaften und Methoden in der Methode „__clone()“ ohne Parameter um.
Es enthält automatisch zwei Zeiger, $this und $that, $this zeigt auf die Kopie und $that zeigt auf das Original;
Codefragment
class Person{ //下面是人的成员属性 var $name; //人的名子 var $sex; //人的性别 var $age; //人的年龄 //定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值 function __construct($name="", $sex="", $age=""){ $this->name=$name; $this->sex=$sex; $this->age=$age; } //这个人可以说话的方法, 说出自己的属性 function say() { echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>"; } //对象克隆时自动调用的方法, 如果想在克隆后改变原对象的内容,需要在__clone()中重写原本 的属性和方法 function __clone(){ //$this指的复本p2, 而$that是指向原本p1,这样就在本方法里,改变了复本的属性。 $this->name="我是假的$that->name"; $this->age=30; } } $p1=new Person("张三", "男", 20); $p2=clone $p1; $p1->say(); $p2->say(); ?>
Ausführungsergebnis
Mein Name ist: Zhang San Geschlecht: Männlich Mein Alter ist: 20
Mein Name ist: Ich bin Fake Zhang Sans Geschlecht: Männlich Mein Alter ist: 30
18.__call behandelt Aufruffehler
Bei der Programmentwicklung, wenn die aufgerufene Methode nicht existiert, wenn ein Objekt verwendet wird, um eine interne Methode des Objekts aufzurufen , dann das Programm
Das Programm geht schief, dann wird das Programm beendet und kann nicht weiter ausgeführt werden. Wenn das Programm also eine Methode
aufruft, die im Objekt nicht vorhanden ist, werden wir aufgefordert, dass die aufgerufene Methode und die verwendeten Parameter nicht vorhanden sind, das Programm jedoch weiterhin ausgeführt werden kann. Zu diesem Zeitpunkt müssen wir
ausführen Verwenden Sie die Methode, die im Aufruf nicht vorhanden ist. Die Methode „__call()“ wird automatisch aufgerufen, wenn die Methode verwendet wird.
Codeausschnitt
<?php //这是一个测试的类,里面没有属性和方法 class Test{ } //产生一个Test类的对象 $test=new Test(); //调用对象里不存在的方法 $test->demo("one", "two", "three"); //程序不会执行到这里 echo "this is a test<br>"; ?>
Schwerwiegender Fehler: Aufruf der undefinierten Methode Test::demo()
Wir fügen unten die Methode „__call()“ hinzu. Der erste Parameter dient zum Aufrufen einer nicht vorhandenen Methode.
Während des Prozesses wird der Methodenname der Methode automatisch aufgerufen Nicht vorhandene Methode wird übergeben an Der erste Parameter und der zweite Parameter
werden in den mehreren Parametern dieser Methode in Form von Arrays übergeben.
Codeausschnitt
<?php //这是一个测试的类,里面没有属性和方法 class Test{ //调用不存的方法时自动调用的方法,第一个参数为方法名,第二个参数是数组参数 function __call($function_name, $args){ print "你所调用的函数:$function_name(参数:"; print_r($args); print ")不存在!<br>\n"; } } //产生一个Test类的对象 $test=new Test(); //调用对象里不存在的方法 $test->demo("one", "two", "three"); //程序不会退出可以执行到这里 echo "this is a test<br>"; ?>
Ausführungsergebnis
Die von Ihnen aufgerufene Funktion: demo(Parameter: Array ( [0] => eins [ 1] => zwei [2] => drei ) ) existiert nicht!
Dies ist ein Test.