Tostring ()在 PHP 中等价

How do I convert the value of a PHP variable to string?

I was looking for something better than concatenating with an empty string:

$myText = $myVar . '';

Like the ToString() method in Java or .NET.

转载于:https://stackoverflow.com/questions/28098/tostring-equivalent-in-php

You can use the casting operators:

$myText = (string)$myVar;

There are more details for string casting and conversion in the Strings section of the PHP manual, including special handling for booleans and nulls.

Putting it in double quotes should work:

$myText = "$myVar";

You can always create a method named .ToString($in) that returns

$in . '';  

How do I convert the value of a PHP variable to string?

A value can be converted to a string using the (string) cast or the strval() function. (Edit: As Thomas also stated).

It also should be automatically casted for you when you use it as a string.

If you're converting anything other than simple types like integers or booleans, you'd need to write your own function/method for the type that you're trying to convert, otherwise PHP will just print the type (such as array, GoogleSniffer, or Bidet).

PHP is dynamically typed, so like Chris Fournier said, "If you use it like a string it becomes a string". If you're looking for more control over the format of the string then printf is your answer.

This is done with typecasting:

$strvar = (string) $var; // Casts to string
echo $var; // Will cast to string implicitly
var_dump($var); // Will show the true type of the variable

In a class you can define what is output by using the magical method __toString. An example is below:

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"

Some more type casting examples:

$i = 1;

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

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

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

For primitives just use (string)$var or print this variable straight away. PHP is dynamically typed language and variable will be casted to string on the fly.

If you want to convert objects to strings you will need to define __toString() method that returns string. This method is forbidden to throw exceptions.

You are looking for strval:

string strval ( mixed $var )

Get the string value of a variable. See the documentation on string for more information on converting to string.

This function performs no formatting on the returned value. If you are looking for a way to format a numeric value as a string, please see sprintf() or number_format().

You can either use typecasting:

$var = (string)$varname;

or StringValue:

$var = strval($varname);

or SetType:

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

They all work for the same thing in terms of Type-Juggling.

Use print_r:

$myText = print_r($myVar,true);

You can also use like

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

this will set $myText to a string, like :

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

Use var_export to get a little bit more info (with types of variable,...) :

$myText = var_export($myVar,true);

Another option is to use the built in settype function:

<?php
$foo = "5bar"; // string
$bar = true;   // boolean

settype($foo, "integer"); // $foo is now 5   (integer)
settype($bar, "string");  // $bar is now "1" (string)
?>

This actually performs a conversion on the variable unlike typecasting and allows you to have a general way of converting to multiple types.

Double quotes should work too... it should create a string, then it should APPEND/INSERT the casted STRING value of $myVar in between 2 empty strings.

In addition to the answer given by Thomas G. Mayfield:

If you follow the link to the string casting manual, there is a special case which is quite important to understand:

(string) cast is preferable especially if your variable $a is an object, because PHP will follow the casting protocol according to its object model by calling __toString() magic method (if such is defined in the class of which $a is instantiated from).

PHP does something similar to

function castToString($instance) 
{ 
    if (is_object($instance) && method_exists($instance, '__toString')) {
        return call_user_func_array(array($instance, '__toString'));
    }
}

The (string) casting operation is a recommended technique for PHP5+ programming making code more Object-Oriented. IMO this is a nice example of design similarity (difference) to other OOP languages like Java/C#/etc., i.e. in its own special PHP way (whenever it's for the good or for the worth).

For objects, you may not be able to use the cast operator. Instead, I use the json_encode() method.

For example, the following will output contents to the error log:

error_log(json_encode($args));

The documentation says that you can also do:

$str = "$foo";

It's the same as cast, but I think it looks prettier.

Source:

Try this little strange but working approach to convert textual part of stdClass to string type:

$my_std_obj_result = $SomeResponse->return->data; //specific to object/implementation

$my_string_result = implode ((array)$my_std_obj_result); //do conversion

I think it is worth mentioning that you can catch any output (like print_r, var_dump) in a variable by using output buffering:

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

Thanks to: https://stackoverflow.com/a/139491/987864

Some if not all of the methods above fail when the intended string variable has a leading zero ie 077543 an attempt to convert such a variable fails to get the intended string because the variable is converted to base 8 (octal).

All these will make $str have a value of 32611

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

You can use also, var_export php function.

I use variableToString

https://github.com/lingtalfi/VariableToString

It handles every php type and is flexible (you can extend it if you want)

$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)."'";

As others have mentioned, objects need a __toString method to be cast to a string. An object that doesn't define that method can still produce a string representation using the spl_object_hash function.

This function returns a unique identifier for the object. This id can be used as a hash key for storing objects, or for identifying an object, as long as the object is not destroyed. Once the object is destroyed, its hash may be reused for other objects.

I have a base Object class with a __toString method that defaults to calling md5(spl_object_hash($this)) to make the output clearly unique, since the output from spl_object_hash can look very similar between objects.

This is particularly helpful for debugging code where a variable initializes as an Object and later in the code it is suspected to have changed to a different Object. Simply echoing the vars to the log can reveal the change from the object hash (or not).