Comme la documentation de l fonction magique __toString()
explique :
En __toString()
permet à une classe de décider comment elle va réagir lorsqu'elle est traitée comme une chaîne de caractères.
Parce que la classe SimpleXmlElement
met en œuvre le __toString()
la méthode magique, elle (la méthode) est invoquée chaque fois qu'une SimpleXmlElement
est utilisé lorsqu'une chaîne de caractères est attendue. La valeur renvoyée par __toString()
est utilisé à la place de l'objet.
Il est difficile de dire s'il s'agit d'une fonctionnalité ou d'un bogue. 1 . La fonction testXml()
attend actuellement une chaîne de caractères comme argument et vous n'êtes pas satisfait du fait qu'il accepte silencieusement un fichier SimpleXmlElement
à la place.
Si vous supprimez le type de son argument, l'appel à __toString()
n'a plus lieu d'être et la valeur de l'élément $xml
à l'intérieur de la fonction est l'argument SimpleXmlElement
objet. L'appel à __toString()
se produit dans le echo "this is a string: " .$xml;
et il est très pratique que vous puissiez imprimer la valeur de $xml
même si ce n'est pas une chaîne de caractères.
Si vous pensez que c'est un bug, alors echo
(qui attend des chaînes de caractères comme arguments) devrait se plaindre du type de $xml
et ne devrait pas l'imprimer. Pas si pratique, n'est-ce pas ?
1 Ce n'est pas un bug, c'est la façon dont le langage a évolué. __toString()
a été introduit avant déclarations de type pour les types scalaires et, afin de ne pas casser le comportement existant, il est invoqué si c'est possible au lieu de déclencher une erreur sur le type incorrect de l'argument.