Où et pourquoi utilisons-nous __toString () en PHP?
Je comprends comment ça fonctionne, mais pourquoi nous les avons pratiquement l'utiliser?
<?php
class cat {
public function __toString() {
return "This is a cat\n";
}
}
$toby = new cat;
print $toby;
?>
N'est-ce pas la même chose que ceci:
<?php
class cat {
public function random_method() {
echo "This is a cat\n";
}
}
$toby = new cat;
$toby->random_method();
?>
ne peut-on pas utiliser toute autre méthode publique à la sortie de n'importe quel texte?
Pourquoi avons-nous besoin de la magie de la méthode comme celle-ci?
source d'informationauteur Stann
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas "besoin" de lui. Mais la définition qu'il permet à votre objet à être implicitement converti en chaîne de caractères, ce qui est très pratique.
Ayant des fonctions membres qui
echo
directement est médiocre parce qu'il donne trop de contrôle de la production à la classe elle-même. Vous voulez retourner à la les chaînes à partir de fonctions de membre, et l'appelant de décider quoi faire avec eux: que ce soit pour stocker dans une variable, ouecho
ou quoi que ce soit. À l'aide de la fonction magique signifie que vous n'avez pas besoin de la fonction explicite d'appel pour ce faire.En plus de toutes les réponses, voici un exemple :
C'est une classe simple qui vous aide à gérer les javascripts. Vous inscrire de nouveaux scripts en appelant
$scripts->add('...')
.Puis à traiter la file d'attente et d'imprimer tous les scripts enregistrés appelez simplement
print $scripts;
.Évidemment, cette classe est inutile dans cette forme, mais si vous mettez en œuvre d'actifs de la dépendance, la gestion des versions, des contrôles pour dupliquer des inclusions, etc., il commence à faire sens (exemple).
L'idée de base est que le but principal de cet objet est de créer une chaîne de caractères (HTML), donc l'utilisation de l' __toString dans ce cas est pratique...
C'est juste une méthode normalisée pour produire une représentation sous forme de chaîne d'un objet. Votre
random_method
méthode fonctionne si vous assumez tous les objets dans votre programme utilise la même méthode, ce qui pourrait ne pas être le cas si vous utilisez des bibliothèques tierces.Vous n'avez pas besoin de la magie de la méthode, mais il offre un confort, que vous ne serez jamais vraiment avoir à appeler explicitement.
Aussi, si PHP en interne souhaitez transformer votre objet dans un texte, il sait comment le faire.
http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.tostring
__toString()
est appelée lorsqu'un objet est transmis à une fonction (especho()
ouprint()
) lors de son contexte devrait être une chaîne de caractères. Depuis un objet n'est pas une chaîne, le__toString()
poignées de la transformation de l'objet en une chaîne de caractères de la représentation.__toString
vous permet de définir la sortie lorsque votre objet est converti en chaîne de caractères. Cela signifie que vous pouvezprint
l'objet lui-même, plutôt que de la valeur de retour d'une fonction. C'est souvent plus pratique. Voir la saisie manuelle.Vous n'avez pas à appeler la méthode toString. Lorsque vous imprimez l'objet toString est appelé implicitement. Toute autre méthode aurait pu être appelé explicitement.
À l'aide de
__toString()
remplace l'opérateur qui est appelé lorsque vous imprimez des objets de cette classe, si elle rend plus facile pour vous de configurer la façon dont un objet de cette classe doivent être affichées.c'est comme remplacer avec c# :