Question

Comment convertir la valeur d’une variable PHP en chaîne ?

Je cherchais quelque chose de mieux que de concaténer une chaîne vide :

$myText = $myVar . '';

Comme le ToString() méthode en Java ou .NET.

Était-ce utile?

La solution

Vous pouvez utiliser le opérateurs de casting:

$myText = (string)$myVar;

Il y a plus de détails sur la conversion et la conversion de chaînes dans le Section cordes du manuel PHP, y compris une gestion spéciale des booléens et des valeurs nulles.

Autres conseils

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 affiché en utilisant la méthode magique __toString.Un exemple est ci-dessous :

class Bottles {
    public function __toString()
    {
        return 'Ninety nine green bottles';
    }
}

$ex = new Bottles;
var_dump($ex, (string) $ex);
// Returns: instance of Bottles and "Ninety nine green bottles"

Quelques autres exemples de conversion de type :

$i = 1;

// int 1
var_dump((int) $i);

// bool true
var_dump((bool) $i);

// string "1"
var_dump((string) 1);

Utiliser print_r:

$myText = print_r($myVar,true);

Vous pouvez également utiliser comme

$myText = print_r($myVar,true)."foo bar";

cela définira $myText à une chaîne, comme :

array (
  0 => '11',
)foo bar

Utiliser var_export pour avoir un peu plus d'infos (avec les types de variables,...) :

$myText = var_export($myVar,true);

Vous pouvez soit utiliser le transtypage :

$var = (string)$varname;

ou StringValue :

$var = strval($varname);

ou DéfinirType :

$success = settype($varname, 'string');
// $varname itself becomes a string

Ils travaillent tous pour la même chose en termes de Type-Juggling.

Comment convertir la valeur d’un PHP variable à chaîne de caractères ?

Une valeur peut être convertie en chaîne à l'aide du (chaîne) casting ou la strval() fonction.(Modifier:Comme Thomas également indiqué).

Il devrait également être automatiquement converti pour vous lorsque vous l'utilisez comme chaîne.

Tu recherches strval:

string strval ( mixed $var )

Obtenez la valeur de chaîne d'une variable.Voir la documentation sur string pour Plus d’informations sur la conversion en corde.

Cette fonction n’effectue aucun formatage sur la valeur renvoyée.Si vous êtes à la recherche d’un moyen de formater un fichier numérique valeur sous forme de chaîne de caractères, veuillez consulter sprintf() ou number_format().

Pour les primitives, utilisez simplement (string)$var ou imprimez cette variable immédiatement.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 __toString() méthode qui renvoie une chaîne.Cette méthode est interdite pour lever des exceptions.

Le mettre entre guillemets devrait fonctionner :

$myText = "$myVar";

Je pense qu'il convient de mentionner que vous pouvez capturer n'importe quelle sortie (comme print_r, var_dump) dans une variable en utilisant la mise en mémoire tampon de sortie :

<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>

Grâce à:https://stackoverflow.com/a/139491/987864

Une autre option consiste à utiliser le définir le type fonction:

<?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 un moyen général de conversion en plusieurs types.

En complément de la réponse donnée par Thomas G.Mayfield :

Si vous suivez le lien vers le manuel de casting de cordes, il y a un cas particulier qu'il est assez important de comprendre :

(string) cast est préférable surtout si votre variable $un est un objet, car PHP suivra le casting protocole selon son modèle objet en appelant __toString() méthode magique (si telle est définie dans la classe à partir de laquelle $a est instancié).

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'));
    }
}

Le (chaîne) L'opération de casting est une technique recommandée pour la programmation PHP5+, rendant le code plus orienté objet.OMI, c'est un bel exemple de similitude (différence) de conception avec d'autres langages POO comme Java/C#/etc., c'est-à-direà sa manière PHP (que ce soit pour le bien ou pour la valeur).

Comme d'autres l'ont mentionné, les objets ont besoin d'un __toString méthode à convertir en chaîne.Un objet qui ne définit pas cette méthode peut toujours produire une représentation sous forme de chaîne en utilisant le spl_object_hash fonction.

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 un __toString méthode qui appelle par défaut md5(spl_object_hash($this)) pour rendre la sortie clairement unique, puisque la sortie de spl_object_hash peut être très similaire entre les objets.

Ceci est particulièrement utile pour le débogage du code dans lequel une variable s'initialise en tant qu'objet et, plus tard dans le code, elle est soupçonnée d'avoir été modifiée en un objet différent.Le simple fait de faire écho aux variables dans le journal peut révéler le changement par rapport au hachage de l'objet (ou non).

Certaines, sinon toutes, des méthodes ci-dessus échouent lorsque la variable de chaîne prévue comporte un zéro non significatif. c'est-à-dire 077543une tentative de conversion d'une telle variable ne parvient pas à obtenir la chaîne souhaitée car la variable est convertie en base 8 (octale).

Tout cela fera $str avoir une valeur de 32611

$no = 077543  
$str = (string)$no;   
$str = "$no";   
$str = print_r($no,true);  
$str = strval($no);   
$str = settype($no, "integer");  

La documentation indique que vous pouvez également faire :

$str = "$foo";

C'est la même chose que le casting, mais je trouve que ça a l'air plus joli.

Source:

Je pense que cette question est un peu trompeuse car, toString() en Java n’est pas seulement un moyen de convertir quelque chose en une chaîne de caractères, c’est ce que fonderie via (string) ou String.valueOf() le fait et cela fonctionne aussi bien en PHP.

//Java
String myText = (string) myVar;
//PHP
$myText = (string) $myVar;

Notez que cela peut être problématique car Java est une sauvegarde de type. Voir ici pour plus de détails

Mais comme je l'ai dit, il s'agit de Casting et donc pas de l'équivalent de toString() de Java.toString en Java ne se contente pas de convertir un objet en chaîne, il vous donnera plutôt la représentation sous forme de chaîne.Et c'est quoi __toString() en PHP fait

//Java
class SomeClass{
    public String toString(){ 
        return 'some string representation'; 
    } 
}
//php
class SomeClass{
    public function __toString()
    {
        return 'some string representation';
    }
}

Et de l'autre côté :

//Java
new SomeClass().toString();//'some string representation'
//PHP
strval(new SomeClass);//'some string representation'

Qu'est-ce que je veux dire par « donner la représentation String » ?Imaginez une classe pour une bibliothèque avec des millions de livres.

  • Convertir cette classe en chaîne convertirait (par défaut) les données, ici tous les livres, en chaîne, de sorte que la chaîne serait très longue et la plupart du temps pas très utile non plus.
  • To String insted vous donnera la représentation String, c'est-à-direseulement le nom de la bibliothèque.C'est plus court et vous donne donc moins d'informations mais plus importantes.

Ce sont deux approches valables mais avec des objectifs très différents, aucune n'est une solution parfaite pour chaque cas et vous devez choisir judicieusement celle qui correspond le mieux à vos besoins.

Bien sûr, il existe 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 concat an empty string works too

Toutes ces méthodes renverront une chaîne, certaines d'entre elles utilisant __toString en interne, d'autres échoueront sur les objets, jetez un œil à la Documentation PHP pour plus de détails.

Les guillemets doubles devraient également fonctionner...il doit créer une chaîne, puis il doit AJOUTER/INSÉRER la valeur STRING convertie de $myVar entre 2 chaînes vides.

Vous pouvez toujours créer une méthode nommée .ToString($in) qui renvoie

$in . '';  

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 imprimera simplement le type (comme un tableau, GoogleSniffer , ou bidet).

PHP est typé dynamiquement, donc comme l'a dit Chris Fournier, "Si vous l'utilisez comme une chaîne, il devient une chaîne".Si vous recherchez plus de contrôle sur le format de la chaîne, alors imprimer est votre réponse.

Vous pouvez également utiliser, var_export fonction php.

$parent_category_name = "new clothes & shoes" ;
//TO make it to string option one
$parent_category = strval($parent_category_name);
//Or make it string my concatenating it with 'new clothes & shoes' 
//useful for database queries
$parent_category = "'".strval($parent_category_name)."'";

Pour les objets, vous ne pourrez peut-être pas utiliser l'opérateur de conversion.A la place, j'utilise le json_encode() méthode.

Par exemple, ce qui suit affichera le contenu dans le journal des erreurs :

error_log(json_encode($args));

Essayez cette approche peu étrange mais efficace pour convertir une 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

J'utilise variableToString

https://github.com/lingtalfi/VariableToString

Il gère tous les types de php et est flexible (vous pouvez l'étendre si vous le souhaitez)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top