Maison  >  Article  >  développement back-end  >  Guide orienté objet PHP __toString() utilisation de l'objet clone __call gère les erreurs d'appel

Guide orienté objet PHP __toString() utilisation de l'objet clone __call gère les erreurs d'appel

高洛峰
高洛峰original
2017-01-06 10:23:071381parcourir

Méthode 16.__toString()
Nous avons mentionné précédemment que la méthode de déclaration d'un nom de méthode commençant par "-" dans la classe (qui nous est fournie par PHP) est automatiquement exécutée dans différentes circonstances à un certain moment
Lors de l'appel de la méthode d'exécution, la méthode "__toString()" est également automatiquement appelée lorsque
génère directement la référence de l'objet, nous avons dit plus tôt que la référence de l'objet est un pointeur, par exemple : "$p. =new "
Person()", $p est une référence. Nous ne pouvons pas utiliser echo pour afficher directement $p. Cela générera une erreur telle que "Catchable fatal
error : l'objet de la classe Person n'a pas pu être converti. to string". Si vous définissez la méthode
"__toString()" dans la classe, aucune erreur ne sera générée lors de la sortie directe de la référence de l'objet. Au lieu de cela, la méthode
"__toString()" sera automatiquement appelée et "__toString() sera généré. )", donc la méthode "__toString()" doit
avoir une valeur de retour (instruction return).
Extrait de code

<?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(&#39;Hello&#39;); 
//直接输出对象 
echo $class; 
?>

Sortie de l'exemple ci-dessus : Bonjour
17. Cloner un objet
Parfois, nous devons utiliser deux objets identiques ou plus dans un projet. "nouveau"
mot-clé pour recréer un objet puis attribuer les mêmes attributs, c'est plus lourd et sujet aux erreurs, il est donc très utile de
cloner complètement un objet identique basé sur un objet Nécessaire, et après le clonage, les deux objets
n'interféreront pas l'un avec l'autre.
En PHP5, nous utilisons le mot-clé "clone" pour cloner des objets ;
Extraits de code

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

PHP5 définit un nom de méthode spécial "__clone()", qui est utilisé dans le clonage d'objets A. méthode qui est automatiquement appelée lorsque
L'utilisation de la méthode "__clone()" créera un objet avec les mêmes propriétés et méthodes que l'objet d'origine. Si vous souhaitez modifier le contenu de l'
objet d'origine après le clonage, vous devez le faire. besoin d'utiliser __clone() Réécrivez les propriétés et méthodes d'origine dans la méthode "__clone()" sans paramètres
Elle contient automatiquement deux pointeurs, $this et $that, $this pointe vers la copie et $that pointe vers. l'original ;
Fragment de code

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

Sortie de l'exemple ci-dessus :
Résultat de l'exécution
Je m'appelle : Zhang San Sexe : Homme Mon âge est : 20
Mon nom est : Je suis Fake Zhang San. Le sexe de Zhang San : Homme Mon âge est : 30
18.__l'appel gère les erreurs d'appel
Dans le développement de programmes, si la méthode appelée n'existe pas lors de l'utilisation d'un objet pour appeler une méthode interne de l'objet , alors le programme
Le programme tournera mal, puis le programme se terminera et ne pourra pas continuer à s'exécuter. Ainsi, lorsque le programme appelle une méthode
qui n'existe pas à l'intérieur de l'objet, nous sommes informés que la méthode appelée et les paramètres utilisés n'existent pas, mais le programme peut continuer à s'exécuter. A ce moment, nous devons <.> utiliser la méthode qui n'existe pas dans l'appel. La méthode "__call()" est automatiquement appelée lorsque la méthode est utilisée.
Extrait de code

<?php 
//这是一个测试的类,里面没有属性和方法 
class Test{ 
} 
//产生一个Test类的对象 
$test=new Test(); 
//调用对象里不存在的方法 
$test->demo("one", "two", "three"); 
//程序不会执行到这里 
echo "this is a test<br>"; 
?>
L'erreur suivante s'est produite dans l'exemple ci-dessus et le programme ne peut pas continuer à s'exécuter

Erreur fatale : appel à une méthode non définie Test::demo()
Nous ajoutons ci-dessous la méthode "__call()", cette méthode a 2 paramètres Le premier paramètre est d'appeler une méthode inexistante
Lors du processus, lorsque la méthode __call() est automatiquement appelée, le nom de la méthode. une méthode inexistante est passée à Le premier paramètre et le deuxième paramètre
sont passés dans les multiples paramètres de cette méthode sous forme de tableaux.
Extrait de code

<?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>"; 
?>
Le résultat de sortie de l'exemple ci-dessus est :

Résultat de l'exécution
La fonction que vous avez appelée : demo(Paramètre : Array ( [0] => one [ 1] => deux [2] => trois ) ) n'existe pas !
Ceci est un test.

Pour plus de guides orientés objet PHP sur l'utilisation de __toString(), le clonage d'objets, la gestion de __call les erreurs d'appel et les articles connexes, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn