如何将PHP变量的值转换为字符串?
我正在寻找比连接一个空字符串更好的东西:
$myText = $myVar . '';
类似于Java或。net中的ToString()方法。
如何将PHP变量的值转换为字符串?
我正在寻找比连接一个空字符串更好的东西:
$myText = $myVar . '';
类似于Java或。net中的ToString()方法。
当前回答
正如其他人所提到的,对象需要__toString方法来强制转换为字符串。没有定义该方法的对象仍然可以使用spl_object_hash函数生成字符串表示。
该函数返回对象的唯一标识符。这个id可以用作存储对象的散列键,或者用于标识一个对象,只要该对象没有被销毁。一旦对象被销毁,它的散列可以被其他对象重用。
我有一个带有__toString方法的基Object类,默认调用md5(spl_object_hash($this))以使输出明确唯一,因为spl_object_hash的输出在对象之间看起来非常相似。
这对于调试变量初始化为Object的代码特别有帮助,稍后在代码中它被怀疑已经更改为不同的Object。简单地将变量回显到日志中就可以显示(或不显示)来自对象哈希的更改。
其他回答
正如其他人所提到的,对象需要__toString方法来强制转换为字符串。没有定义该方法的对象仍然可以使用spl_object_hash函数生成字符串表示。
该函数返回对象的唯一标识符。这个id可以用作存储对象的散列键,或者用于标识一个对象,只要该对象没有被销毁。一旦对象被销毁,它的散列可以被其他对象重用。
我有一个带有__toString方法的基Object类,默认调用md5(spl_object_hash($this))以使输出明确唯一,因为spl_object_hash的输出在对象之间看起来非常相似。
这对于调试变量初始化为Object的代码特别有帮助,稍后在代码中它被怀疑已经更改为不同的Object。简单地将变量回显到日志中就可以显示(或不显示)来自对象哈希的更改。
这是通过类型转换完成的:
$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);
对于基本类型,只需使用(string)$var或直接打印此变量。PHP是动态类型的语言,变量会动态地转换为字符串。
如果你想将对象转换为字符串,你需要定义返回字符串的__toString()方法。禁止此方法抛出异常。
你可以使用类型转换:
$var = (string)$varname;
或StringValue:
$var = strval($varname);
或SetType:
$success = settype($varname, 'string');
// $varname itself becomes a string
它们在类型杂耍方面的作用都是一样的。
你可以使用强制转换操作符:
$myText = (string)$myVar;
PHP手册的字符串部分有关于字符串强制转换的更多细节,包括对布尔值和空值的特殊处理。