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

我正在寻找比连接一个空字符串更好的东西:

$myText = $myVar . '';

类似于Java或。net中的ToString()方法。


当前回答

我觉得这个问题有点误导人, toString()在Java中不仅仅是一种将某些东西强制转换为String的方法。这就是via (string)或string . valueof()所做的,它在PHP中也同样有效。

// Java
String myText = (string) myVar;

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

注意,这可能是有问题的,因为Java是类型安全的(有关详细信息,请参阅这里)。

但正如我所说,这是强制转换,因此不等同于Java的toString()。

Java中的toString不仅仅是将对象转换为String。相反,它将为您提供String表示形式。这就是PHP中的__toString()所做的。

// Java
class SomeClass{
    public String toString(){
        return "some string representation";
    }
}

// PHP
class SomeClass{
    public function __toString()
    {
        return "some string representation";
    }
}

另一方面:

// Java
new SomeClass().toString(); // "Some string representation"

// PHP
strval(new SomeClass); // "Some string representation"

我说的“给予字符串表示”是什么意思? 想象一个有数百万册图书的图书馆的类。

将该类转换为String将(默认情况下)将数据(这里是所有书籍)转换为字符串,因此String将非常长,而且大多数情况下也不是很有用。 To String将为您提供String表示形式,即仅提供库的名称。这是更短的,因此给你更少,但更重要的信息。

这些都是有效的方法,但目标非常不同,都不是对每种情况的完美解决方案,您必须明智地选择更适合您的需求的解决方案。

当然,还有更多的选择:

$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

所有这些方法都将返回一个String,其中一些在内部使用__toString,而其他一些方法将在object上失败。查看PHP文档了解更多细节。

其他回答

你可以使用强制转换操作符:

$myText = (string)$myVar;

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

当预期的字符串变量前导为0(例如077543)时,前面的回答中的一些(如果不是全部)方法会失败。

转换这样一个变量的尝试无法获得预期的字符串,因为变量被转换为以8为基数(八进制)。

所有这些将使$str的值为32611:

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

你正在寻找strval:

字符串strval (mixed $var) 获取一个变量的字符串值。 参见有关字符串的文档 有关转换到的更多信息 字符串。 此函数不执行格式化 返回值。如果你是 正在寻找格式化数字的方法 值作为字符串,请参见 Sprintf()或number_format()。

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

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

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

与类型转换不同,这实际上是对变量执行转换,并允许您有一种转换为多种类型的通用方法。

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

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

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