如何将PHP变量的值转换为字符串?
我正在寻找比连接一个空字符串更好的东西:
$myText = $myVar . '';
类似于Java或。net中的ToString()方法。
如何将PHP变量的值转换为字符串?
我正在寻找比连接一个空字符串更好的东西:
$myText = $myVar . '';
类似于Java或。net中的ToString()方法。
当前回答
对于基本类型,只需使用(string)$var或直接打印此变量。PHP是动态类型的语言,变量会动态地转换为字符串。
如果你想将对象转换为字符串,你需要定义返回字符串的__toString()方法。禁止此方法抛出异常。
其他回答
除了Thomas G. Mayfield给出的答案之外:
如果你跟随字符串强制转换手册的链接,有一个非常重要的特殊情况需要理解:
(string)类型转换更可取,特别是如果变量$a是一个对象,因为PHP将根据其对象模型调用__toString()魔术方法来遵循类型转换协议(如果在$a实例化的类中定义了此方法)。
PHP做了类似的事情
function castToString($instance)
{
if (is_object($instance) && method_exists($instance, '__toString')) {
return call_user_func_array(array($instance, '__toString'));
}
}
(string)强制转换操作是PHP5+编程中推荐的技术,可以使代码更加面向对象。在我看来,这是一个与其他OOP语言(如Java/ c#等)设计相似(不同)的好例子。也就是说,以它自己特殊的PHP方式(只要是为了好的或有价值的)。
把它放在双引号里应该可以:
$myText = "$myVar";
我觉得这个问题有点误导人, 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文档了解更多细节。
正如其他人所提到的,对象需要__toString方法来强制转换为字符串。没有定义该方法的对象仍然可以使用spl_object_hash函数生成字符串表示。
该函数返回对象的唯一标识符。这个id可以用作存储对象的散列键,或者用于标识一个对象,只要该对象没有被销毁。一旦对象被销毁,它的散列可以被其他对象重用。
我有一个带有__toString方法的基Object类,默认调用md5(spl_object_hash($this))以使输出明确唯一,因为spl_object_hash的输出在对象之间看起来非常相似。
这对于调试变量初始化为Object的代码特别有帮助,稍后在代码中它被怀疑已经更改为不同的Object。简单地将变量回显到日志中就可以显示(或不显示)来自对象哈希的更改。
我认为值得一提的是,你可以通过使用输出缓冲来捕获变量中的任何输出(如print_r, var_dump):
<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>
感谢: 如何将var_dump的结果捕获到字符串?