Dépasser les limites de __tostring

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Dépasser les limites de __tostring

Re: Dépasser les limites de __tostring

par Hubert Roksor » 04 juin 2006, 16:01

En fait je pense que Discret a déjà lu la doc puisqu'il la cite.
On remarque que la fonction __tostring semble fonctionner même si non utilisé directement dans un echo.
Si vous voulez suivre la discussion actuelle entre les développeurs de PHP et les conséquences d'activer __toString() à chaque fois qu'un objet est utilisé comme une chaîne: http://marc.theaimsgroup.com/?t=114933525100005&r=1&w=2

par rami » 04 juin 2006, 15:30

Issu de la doc :
Il est important de noter que la méthode __toString ne sera appelée que si elle est directement combinée avec echo() ou print().
<?php
// __toString appelée
echo $class;

// __toString appelée (reste un paramètre normal pour echo)
echo 'text', $class;

// __toString non appelée (opérateur de concaténation utilisé en premier)
echo 'text' . $class;

// __toString non appelée (conversion en une chaîne de caractères en premier)
echo (string) $class;

// __toString non appelée (conversion en une chaîne de caractères en premier)
echo "text $class";
?> 

par Hubert Roksor » 31 mai 2006, 22:38

Ce n'est pas possible désolé. Je sais, c'est pas logique... :| Tu peux espérer que ça fonctionne comme tu le souhaites dans PHP 5.2 (mais jamais dans PHP 5.1).

Si ça peut te consoler, même si ça
echo "Valeur = " . $test;
ou ça
echo "Valeur = $test";
ne marche pas,
echo "Valeur = ", $test;
fonctionne.

C'est une maigre consolation :roll:

Dépasser les limites de __tostring

par Discret » 31 mai 2006, 21:37

Bonjour, voici un court script:
<?php
	
	$xml = simplexml_load_string ("<xml>Valeur</xml>");
	$chaine = "Valeur = " . $xml;
	echo $chaine;
	
	echo "<br/>";
	
	$test = new test;
	$chaine = "Valeur = " . $test;
	echo $chaine;	
	
	class test {
		public function __toString () {
			return "Valeur";
		}
	}
	
?>
On remarque que la fonction __tostring semble fonctionner même si non utilisé directement dans un echo.
Comment faire ceci pour ma classe test ? (Si cela est possible).


Bonne soirée.