J'utiliserais json_encode($myText). J'ai trouvé que les solutions suggérées print_ret (string)varfonctionnent bien pour les valeurs scalaires et des objets simples. Pour les variables, classes ou objets complexes, si un complet __toString()n'est pas défini, je préfère ce qui précède json_encode.
Il y a plus de détails pour la conversion et la conversion de chaînes dans la section Chaînes du manuel PHP, y compris la gestion spéciale pour les booléens et les null.
Object of class Foo could not be converted to string. Existe-t-il une solution générale qui peut convertir n'importe quoi (tableaux + objets + quoi que ce soit) en chaîne?
Remarque: cela donnera un avis PHP lorsqu'il est utilisé sur des tableaux.
dave1010
29
@MarkAmery Il a donné une réponse qui appelle implicitement la __toString()"méthode magique", mais ne l'a pas du tout mentionnée. L'utilisateur a demandé une réponse similaire à la toString()méthode Java , et en PHP, c'est la __toString()fonction.
Supuhstar
2
@Supuhstar Ah oui, je comprends enfin d'où tu viens. Désolé si j'étais obtus avant. Je suis d'accord pour dire qu'il s'agit d'un détail pertinent et qu'il serait utile de l'ajouter, en séparant peut-être la réponse en sections «Conversion de primitives» et «Conversion d'objets» avec des en-têtes.
Mark Amery
309
Cela se fait avec le transtypage:
$strvar =(string) $var;// Casts to string
echo $var;// Will cast to string implicitly
var_dump($var);// Will show the true type of the variable
Dans une classe, vous pouvez définir ce qui est produit en utilisant la méthode magique __toString. Un exemple est ci-dessous:
classBottles{publicfunction __toString(){return'Ninety nine green bottles';}}
$ex =newBottles;
var_dump($ex,(string) $ex);// Returns: instance of Bottles and "Ninety nine green bottles"
"lorsque le paramètre de retour est TRUE, [print_r] renverra une chaîne." Comme print_r est un bon moyen d'imprimer des objets, des tableaux (et aussi des nombres / chaînes), c'est un bon moyen de transformer un objet en une chaîne lisible par l'homme.
Cedric
1
Pour les nouveaux arrivants pour info, la truepièce est indispensable! J'ai essayé plusieurs méthodes de conversion de chaînes, y compris print_ret j'ai été déçu de toutes, puis j'ai découvert le trueparamètre (lire la documentation pour savoir pourquoi cela fonctionne).
ripper234
57
Vous pouvez soit utiliser le transtypage:
$var =(string)$varname;
ou StringValue:
$var = strval($varname);
ou SetType:
$success = settype($varname,'string');// $varname itself becomes a string
Ils travaillent tous pour la même chose en termes de jonglage de type.
strval ($ varname) fait l'affaire pour moi, surtout lorsque la valeur est renvoyée en tant que type "variant" et doit être convertie en chaîne ou en entier.
Milan
strval()est ce que je cherchais parce que je voulais l'utiliser avec array_walk. Par exemple$array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
Buttle Butkus
33
Comment convertir la valeur d'une variable PHP en chaîne?
Une valeur peut être convertie en chaîne à l'aide de la conversion (chaîne) ou de la fonction strval () . (Edit: Comme Thomas l'a également déclaré).
Il doit également être automatiquement casté pour vous lorsque vous l'utilisez comme chaîne.
Obtenez la valeur de chaîne d'une variable. Consultez la documentation sur la chaîne pour plus d'informations sur la conversion en chaîne.
Cette fonction n'effectue aucun formatage sur la valeur retournée. Si vous cherchez un moyen de formater une valeur numérique sous forme de chaîne, veuillez consulter sprintf () ou number_format ().
C'est en fait très utile car je voulais convertir tous les nombres en chaînes sans utiliser de rappel personnalisé. $strings = array_map('strval', $my_numbers);
peterchaula
C'est la seule réponse qui fonctionne avec les array_mapchaînes callables en général.
Danon
18
Pour les primitives, utilisez (string)$varou imprimez immédiatement cette variable. PHP est un langage typé dynamiquement et la variable sera convertie en chaîne à la volée.
Si vous souhaitez convertir des objets en chaînes, vous devrez définir une __toString()méthode qui renvoie une chaîne. Cette méthode est interdite de lever des exceptions.
Cela fonctionne, mais je ne sais pas si c'est la façon standard de le faire en PHP.
Antoine Aubry
C'est une façon très standard de le faire en bash
Yauhen Yakimovich
Cette méthode fonctionnera si $ myVar est un objet de classe de type __toString ou scalaire. Dans d'autres cas, générez une erreur.
zennin
11
Je pense qu'il vaut la peine de mentionner que vous pouvez attraper n'importe quelle sortie (comme print_r, var_dump) dans une variable en utilisant la mise en mémoire tampon de sortie:
il convient de mentionner que vous n'avez pas besoin de cela avec print_r . Utilisez simplement le remplacement pour revenir en tant que chaîne.
ars265
1
Une meilleure façon serait d'utiliser $result = var_export($someVar, true)sans ob.
Danon
8
Une autre option consiste à utiliser la fonction settype intégrée:
<?php
$foo ="5bar";// string
$bar =true;// boolean
settype($foo,"integer");// $foo is now 5 (integer)
settype($bar,"string");// $bar is now "1" (string)?>
Cela effectue en fait une conversion sur la variable contrairement au transtypage et vous permet d'avoir une manière générale de convertir en plusieurs types.
En plus de la réponse donnée par Thomas G. Mayfield:
Si vous suivez le lien vers le manuel de coulée de cordes, il y a un cas spécial qui est assez important à comprendre:
(string) cast est préférable surtout si votre variable $ a est un objet, car PHP suivra le protocole de casting selon son modèle objet en appelant la méthode magique __toString () (si celle-ci est définie dans la classe dont $ a est instanciée à partir de ).
PHP fait quelque chose de similaire à
function castToString($instance){if(is_object($instance)&& method_exists($instance,'__toString')){return call_user_func_array(array($instance,'__toString'));}}
L' opération de conversion (chaîne) est une technique recommandée pour la programmation PHP5 +, ce qui rend le code plus orienté objet. IMO c'est un bel exemple de similitude de conception (différence) avec d'autres langages OOP comme Java / C # / etc., C'est-à-dire à sa manière PHP (à chaque fois pour le bien ou pour le prix).
Comme d'autres l'ont mentionné, les objets ont besoin d'une __toStringméthode pour être convertis en chaîne. Un objet qui ne définit pas cette méthode peut toujours produire une représentation sous forme de chaîne à l'aide de la fonction spl_object_hash .
Cette fonction renvoie un identifiant unique pour l'objet. Cet identifiant peut être utilisé comme clé de hachage pour stocker des objets ou pour identifier un objet, tant que l'objet n'est pas détruit. Une fois l'objet détruit, son hachage peut être réutilisé pour d'autres objets.
J'ai une classe Object de base avec une __toStringméthode qui appelle md5(spl_object_hash($this))par défaut pour rendre la sortie clairement unique, car la sortie de spl_object_hash peut être très similaire entre les objets.
Cela est particulièrement utile pour le débogage de code où une variable s'initialise en tant qu'objet et plus tard dans le code, elle est soupçonnée d'avoir changé en un objet différent. Le simple écho des variables dans le journal peut révéler le changement par rapport au hachage d'objet (ou non).
Certaines, sinon toutes, les méthodes des réponses précédentes échouent lorsque la variable de chaîne voulue a un zéro non significatif , par exemple, 077543 .
Une tentative de conversion d'une telle variable n'obtient pas la chaîne voulue, car la variable est convertie en base 8 (octal) .
C'est PICNIC (problème sur chaise, pas sur ordinateur) car rien ne manque ici ! print 077543;sorties 32611, c'est donc la valeur de chaîne correcte de $no. Personne ne s'attend à ce que (string)+1renvoie la chaîne +1(elle renvoie correctement 1) ni à ce qui $no = 1+1; print (string)$no;s'affiche 1+1. Remarques: (1) Idem pour hex ( $no=0xff;) également. (2) Vous pouvez récupérer la valeur octale avec '0'.decoct($no);(3) $no="077543";conserve le 0début, "077543" + 1` donne 77544alors que 077543+1(correctement) donne 32612. (PS: pas de vote négatif, car cette erreur est courante)
Tino
4
Je pense que cette question est un peu trompeuse car, toString () en Java n'est pas seulement un moyen de lancer quelque chose sur une chaîne. C'est ce que fait le cast via (string) ou String.valueOf (), et cela fonctionne aussi bien en PHP.
Mais comme je l'ai dit, c'est du casting et donc pas l'équivalent de toString () de Java.
toString en Java ne transforme pas simplement un objet en chaîne. Il vous donnera à la place la représentation String . Et c'est ce que fait __toString () en PHP.
Qu'est-ce que je veux dire par "donner la représentation de la chaîne"? Imaginez une classe pour une bibliothèque avec des millions de livres.
Transformer cette classe en une chaîne convertirait (par défaut) les données, ici tous les livres, en une chaîne, de sorte que la chaîne serait très longue et la plupart du temps pas très utile non plus.
À la place, vous obtiendrez la représentation String, c'est-à-dire uniquement le nom de la bibliothèque. C'est plus court et vous donne donc moins d'informations, mais plus importantes.
Ce sont deux approches valides mais avec des objectifs très différents, aucune n'est une solution parfaite pour chaque cas et vous devez choisir judicieusement ce qui convient le mieux à vos besoins.
Bien sûr, il y a encore plus d'options:
$no =421337// A number in PHP
$str ="$no";// In PHP, stuff inside "" is calculated and variables are replaced
$str = print_r($no,true);// Same as String.format();
$str = settype($no,'string');// Sets $no to the String Type
$str = strval($no);// Get the string value of $no
$str = $no .'';// As you said concatenate an empty string works too
Toutes ces méthodes renverront une chaîne, certaines utilisant __toString en interne et d'autres échouant sur les objets. Jetez un œil à la documentation PHP pour plus de détails.
Les guillemets doubles devraient également fonctionner ... cela devrait créer une chaîne, puis il devrait AJOUTER / INSÉRER la valeur de CHAINE castée de $ myVar entre 2 chaînes vides.
Si vous convertissez autre chose que des types simples comme des entiers ou des booléens, vous devrez écrire votre propre fonction / méthode pour le type que vous essayez de convertir, sinon PHP affichera simplement le type (tel que tableau, GoogleSniffer ou Bidet).
PHP est typé dynamiquement, comme l'a dit Chris Fournier, "Si vous l'utilisez comme une chaîne, il devient une chaîne". Si vous cherchez plus de contrôle sur le format de la chaîne, alors printf est votre réponse.
$parent_category_name ="new clothes & shoes";// To make it to string option one
$parent_category = strval($parent_category_name);// Or make it a string by concatenating it with 'new clothes & shoes'// It is useful for database queries
$parent_category ="'". strval($parent_category_name)."'";
Voté, car je n'ai vraiment aucune idée de ce que vous voulez nous dire. L'utilisation strval()de chaînes n'est qu'une perte de temps complète.
Tino
mec, la chose est de supposer que vous avez reçu une valeur de chaîne = lorsque son repersente ce sera "la chaîne". Mais, lorsque vous vouliez afficher cela en javascript, vous devez le rendre 'stringx' '
Daniel Adenew
C'est extrêmement dangereux (pour ne pas dire: tout simplement faux). Veuillez jeter un œil à stackoverflow.com/q/168214 ou stackoverflow.com/q/23740548 pour comprendre comment passer en toute sécurité quelque chose de PHP à JS! (Désolé d'être un peu hors sujet: passer une var PHP à JS ne faisait pas partie de la question.)
Tino
0
Pour les objets, vous ne pourrez peut-être pas utiliser l'opérateur de transtypage. Au lieu de cela, j'utilise la json_encode()méthode.
Par exemple, les éléments suivants afficheront le contenu dans le journal des erreurs:
Essayez cette petite approche étrange, mais qui fonctionne, pour convertir la partie textuelle de stdClass en type chaîne:
$my_std_obj_result = $SomeResponse->return->data;// Specific to object/implementation
$my_string_result = implode ((array)$my_std_obj_result);// Do conversion
print_r(foo, true)
)!json_encode($myText)
. J'ai trouvé que les solutions suggéréesprint_r
et(string)var
fonctionnent bien pour les valeurs scalaires et des objets simples. Pour les variables, classes ou objets complexes, si un complet__toString()
n'est pas défini, je préfère ce qui précèdejson_encode
.Réponses:
Vous pouvez utiliser les opérateurs de casting :
Il y a plus de détails pour la conversion et la conversion de chaînes dans la section Chaînes du manuel PHP, y compris la gestion spéciale pour les booléens et les null.
la source
Object of class Foo could not be converted to string
. Existe-t-il une solution générale qui peut convertir n'importe quoi (tableaux + objets + quoi que ce soit) en chaîne?__toString()
"méthode magique", mais ne l'a pas du tout mentionnée. L'utilisateur a demandé une réponse similaire à latoString()
méthode Java , et en PHP, c'est la__toString()
fonction.Cela se fait avec le transtypage:
Dans une classe, vous pouvez définir ce qui est produit en utilisant la méthode magique
__toString
. Un exemple est ci-dessous:Quelques autres exemples de casting de type:
la source
Utilisez print_r :
Vous pouvez également l'utiliser comme:
Cela prendra
$myText
une chaîne, comme:Utilisez var_export pour obtenir un peu plus d'informations (avec les types de variables, ...):
la source
true
pièce est indispensable! J'ai essayé plusieurs méthodes de conversion de chaînes, y comprisprint_r
et j'ai été déçu de toutes, puis j'ai découvert letrue
paramètre (lire la documentation pour savoir pourquoi cela fonctionne).Vous pouvez soit utiliser le transtypage:
ou StringValue:
ou SetType:
Ils travaillent tous pour la même chose en termes de jonglage de type.
la source
strval()
est ce que je cherchais parce que je voulais l'utiliser avecarray_walk
. Par exemple$array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
Une valeur peut être convertie en chaîne à l'aide de la conversion (chaîne) ou de la fonction strval () . (Edit: Comme Thomas l'a également déclaré).
Il doit également être automatiquement casté pour vous lorsque vous l'utilisez comme chaîne.
la source
Vous recherchez strval :
la source
$strings = array_map('strval', $my_numbers);
array_map
chaînes callables en général.Pour les primitives, utilisez
(string)$var
ou imprimez immédiatement cette variable. PHP est un langage typé dynamiquement et la variable sera convertie en chaîne à la volée.Si vous souhaitez convertir des objets en chaînes, vous devrez définir une
__toString()
méthode qui renvoie une chaîne. Cette méthode est interdite de lever des exceptions.la source
Le mettre entre guillemets devrait fonctionner:
la source
Je pense qu'il vaut la peine de mentionner que vous pouvez attraper n'importe quelle sortie (comme
print_r
,var_dump
) dans une variable en utilisant la mise en mémoire tampon de sortie:Merci à: Comment puis-je capturer le résultat de var_dump dans une chaîne?
la source
$result = var_export($someVar, true)
sans ob.Une autre option consiste à utiliser la fonction settype intégrée:
Cela effectue en fait une conversion sur la variable contrairement au transtypage et vous permet d'avoir une manière générale de convertir en plusieurs types.
la source
En plus de la réponse donnée par Thomas G. Mayfield:
Si vous suivez le lien vers le manuel de coulée de cordes, il y a un cas spécial qui est assez important à comprendre:
(string) cast est préférable surtout si votre variable $ a est un objet, car PHP suivra le protocole de casting selon son modèle objet en appelant la méthode magique __toString () (si celle-ci est définie dans la classe dont $ a est instanciée à partir de ).
PHP fait quelque chose de similaire à
L' opération de conversion (chaîne) est une technique recommandée pour la programmation PHP5 +, ce qui rend le code plus orienté objet. IMO c'est un bel exemple de similitude de conception (différence) avec d'autres langages OOP comme Java / C # / etc., C'est-à-dire à sa manière PHP (à chaque fois pour le bien ou pour le prix).
la source
Comme d'autres l'ont mentionné, les objets ont besoin d'une
__toString
méthode pour être convertis en chaîne. Un objet qui ne définit pas cette méthode peut toujours produire une représentation sous forme de chaîne à l'aide de la fonction spl_object_hash .J'ai une classe Object de base avec une
__toString
méthode qui appellemd5(spl_object_hash($this))
par défaut pour rendre la sortie clairement unique, car la sortie de spl_object_hash peut être très similaire entre les objets.Cela est particulièrement utile pour le débogage de code où une variable s'initialise en tant qu'objet et plus tard dans le code, elle est soupçonnée d'avoir changé en un objet différent. Le simple écho des variables dans le journal peut révéler le changement par rapport au hachage d'objet (ou non).
la source
Certaines, sinon toutes, les méthodes des réponses précédentes échouent lorsque la variable de chaîne voulue a un zéro non significatif , par exemple, 077543 .
Une tentative de conversion d'une telle variable n'obtient pas la chaîne voulue, car la variable est convertie en base 8 (octal) .
Tout cela aura
$str
une valeur de 32611 :la source
print 077543;
sorties32611
, c'est donc la valeur de chaîne correcte de$no
. Personne ne s'attend à ce que(string)+1
renvoie la chaîne+1
(elle renvoie correctement1
) ni à ce qui$no = 1+1; print (string)$no;
s'affiche1+1
. Remarques: (1) Idem pour hex ($no=0xff;
) également. (2) Vous pouvez récupérer la valeur octale avec'0'.decoct($no);
(3)$no="077543";
conserve le0
début, "077543" + 1` donne77544
alors que077543+1
(correctement) donne32612
. (PS: pas de vote négatif, car cette erreur est courante)Je pense que cette question est un peu trompeuse car, toString () en Java n'est pas seulement un moyen de lancer quelque chose sur une chaîne. C'est ce que fait le cast via (string) ou String.valueOf (), et cela fonctionne aussi bien en PHP.
Notez que cela peut être problématique car Java est de type sécurisé ( voir ici pour plus de détails ).
Mais comme je l'ai dit, c'est du casting et donc pas l'équivalent de toString () de Java.
toString en Java ne transforme pas simplement un objet en chaîne. Il vous donnera à la place la représentation String . Et c'est ce que fait __toString () en PHP.
Et de l'autre côté:
Qu'est-ce que je veux dire par "donner la représentation de la chaîne"? Imaginez une classe pour une bibliothèque avec des millions de livres.
Ce sont deux approches valides mais avec des objectifs très différents, aucune n'est une solution parfaite pour chaque cas et vous devez choisir judicieusement ce qui convient le mieux à vos besoins.
Bien sûr, il y a encore plus d'options:
Toutes ces méthodes renverront une chaîne, certaines utilisant __toString en interne et d'autres échouant sur les objets. Jetez un œil à la documentation PHP pour plus de détails.
la source
La documentation indique que vous pouvez également faire:
C'est la même chose que le casting, mais je pense que cela semble plus joli.
La source:
la source
Les guillemets doubles devraient également fonctionner ... cela devrait créer une chaîne, puis il devrait AJOUTER / INSÉRER la valeur de CHAINE castée de $ myVar entre 2 chaînes vides.
la source
Vous pouvez toujours créer une méthode nommée .ToString ($ in) qui renvoie
la source
Si vous convertissez autre chose que des types simples comme des entiers ou des booléens, vous devrez écrire votre propre fonction / méthode pour le type que vous essayez de convertir, sinon PHP affichera simplement le type (tel que tableau, GoogleSniffer ou Bidet).
la source
PHP est typé dynamiquement, comme l'a dit Chris Fournier, "Si vous l'utilisez comme une chaîne, il devient une chaîne". Si vous cherchez plus de contrôle sur le format de la chaîne, alors printf est votre réponse.
la source
Vous pouvez également utiliser la fonction PHP var_export .
la source
la source
strval()
de chaînes n'est qu'une perte de temps complète.Pour les objets, vous ne pourrez peut-être pas utiliser l'opérateur de transtypage. Au lieu de cela, j'utilise la
json_encode()
méthode.Par exemple, les éléments suivants afficheront le contenu dans le journal des erreurs:
la source
Essayez cette petite approche étrange, mais qui fonctionne, pour convertir la partie textuelle de stdClass en type chaîne:
la source
J'utilise variableToString . Il gère tous les types PHP et est flexible (vous pouvez l'étendre si vous le souhaitez).
la source