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

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

$myText = $myVar . '';

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


当前回答

双引号也可以……它应该创建一个字符串,然后它应该在两个空字符串之间APPEND/INSERT转换后的字符串值$myVar。

其他回答

这是通过类型转换完成的:

$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);

试试这个奇怪但有效的方法,将stdClass的文本部分转换为字符串类型:

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

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

您总是可以创建一个名为.ToString($in)的方法来返回

$in . '';  

正如其他人所提到的,对象需要__toString方法来强制转换为字符串。没有定义该方法的对象仍然可以使用spl_object_hash函数生成字符串表示。

该函数返回对象的唯一标识符。这个id可以用作存储对象的散列键,或者用于标识一个对象,只要该对象没有被销毁。一旦对象被销毁,它的散列可以被其他对象重用。

我有一个带有__toString方法的基Object类,默认调用md5(spl_object_hash($this))以使输出明确唯一,因为spl_object_hash的输出在对象之间看起来非常相似。

这对于调试变量初始化为Object的代码特别有帮助,稍后在代码中它被怀疑已经更改为不同的Object。简单地将变量回显到日志中就可以显示(或不显示)来自对象哈希的更改。

我觉得这个问题有点误导人, 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文档了解更多细节。