PHP中与.NET/Java的toString()等效的方法

566

如何将PHP变量的值转换为字符串?

我想寻找比用空字符串拼接更好的方法:


$myText = $myVar . '';

就像在Java或.NET中的ToString()方法一样。


2
我会使用 json_encode($myText)。我发现建议的解决方案 print_r(string)var 对于标量值和简单对象效果很好。对于复杂变量、类或对象,如果没有定义完整的 __toString(),我更喜欢前面提到的 json_encode - Eric Kigathi
26个回答

789
你可以使用转型运算符
$myText = (string)$myVar;

在PHP手册的字符串部分中,有关于字符串转换和转换的更多细节,包括对布尔值和空值的特殊处理。

14
“Object of class Foo could not be converted to string.” 是否有一般的解决方案可以将任何东西(数组+对象+其他)转换为字符串? - ripper234
3
这是答案 - https://dev59.com/6HVD5IYBdhLWcg3wR5ko#3559247。 - ripper234
2
注意:在数组上使用时,这会产生PHP提示。 - dave1010
29
他给出了一个含蓄地提到了 __toString() "魔术方法" 的答案,但并没有直接提到它。用户要求一个类似于 Java 中 toString() 方法的答案,在 PHP 中,这就是 __toString() 函数。 - Ky -
2
@Supuhstar 哦,我终于明白你的意思了。如果之前我有点迟钝,那我很抱歉。我同意这是一个相关的细节,将其添加进去会很有价值,也许可以用标题将答案分成“转换基元”和“转换对象”两个部分。 - Mark Amery
显示剩余4条评论

312

这可以通过类型转换来完成:

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

在类中,您可以使用神奇的方法__toString定义输出内容。以下是一个示例:

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"

更多的类型转换示例:

$i = 1;

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

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

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

126

使用print_r函数:

$myText = print_r($myVar,true);

你还可以这样使用:

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

这将把$myText设置为一个字符串,例如:

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

使用var_export可以获取更多信息(包括变量类型等):

$myText = var_export($myVar,true);

2
当返回参数为TRUE时,[print_r]将返回一个字符串。 由于print_r是一种漂亮的方式来打印对象、数组(还有数字/字符串),它是将对象转换为易读字符串的好方法。 - Cedric
1
对于新手来说,true 参数是必不可少的!我尝试了几种字符串转换方法,包括 print_r,但它们都让我失望了。后来我发现了 true 参数(请阅读文档以了解其工作原理)。 - ripper234

58

您可以使用类型转换:

$var = (string)$varname;

或 StringValue:

$var = strval($varname);

或者SetType:

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

在类型转换方面,它们都为同一件事情而工作。


对我来说,strval($varname)是个好方法,特别是当值以“variant”类型返回并需要转换为字符串或整数时。 - Milan
strval() is what I was lookigng for because I wanted to use it with array_walk. E.g. $array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString) - Buttle Butkus

34
如何将PHP变量的值转换为字符串?
可以使用(string) caststrval()函数将值转换为字符串。(编辑:正如Thomas所说的那样)。
当您将其用作字符串时,它也应该自动转换为字符串。

28

您正在查找strval函数:

string strval ( mixed $var )

获取变量的字符串值。有关转换为字符串的更多信息,请参见字符串文档。

此函数不对返回的值进行任何格式化。如果您想要将数字值格式化为字符串,请参见sprintf()或number_format()。


3
这段代码非常有用,因为它可以将所有数字转换成字符串而无需使用自定义回调函数。 $strings = array_map('strval', $my_numbers); - Peter Chaula
这是唯一适用于array_map和字符串可调用函数的答案。 - Danon

18

对于原始类型,只需使用(string)$var或直接打印该变量。PHP是一种动态类型的语言,变量将在运行时转换为字符串。

如果您想将对象转换为字符串,您需要定义返回字符串的__toString()方法。此方法禁止抛出异常。


15

将其放入双引号中应该可以解决:

$myText = "$myVar";

这个可以运行,但我不确定它是否是在PHP中标准的做法。 - Antoine Aubry
这是在 bash 中非常标准的做法。 - Yauhen Yakimovich
如果 $myVar 是一个具有 __toString 或标量类型的类对象,则此方法将起作用。在其他情况下会生成错误。 - Levent Yumerov

11

我认为值得一提的是,您可以通过使用输出缓冲来将任何输出(例如print_rvar_dump)捕获到变量中:

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

感谢: 如何将var_dump的结果捕获到字符串中?


1
值得一提的是,使用print_r时不需要这个。只需使用覆盖来返回字符串即可。 - ars265
1
更好的方法是使用 $result = var_export($someVar, true) 而不是使用 ob。 - Danon

7

另一种选择是使用内置的settype函数:

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

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

这实际上对变量进行了转换,不同于类型转换,它使你能够以通用的方式转换为多种类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接