如何将PHP变量的值转换为字符串?
我想寻找比用空字符串拼接更好的方法:
$myText = $myVar . '';
就像在Java或.NET中的ToString()
方法一样。
function castToString($instance)
{
if (is_object($instance) && method_exists($instance, '__toString')) {
return call_user_func_array(array($instance, '__toString'));
}
}
(string)强制转换操作是PHP5+编程中推荐的技术,使代码更加面向对象。在我看来,这是与其他面向对象语言(如Java/C#/等)设计上相似(不同)的一个很好的例子,即以其自己特有的PHP方式实现(无论是为了好还是坏)。
__toString
方法才能被转换为字符串。如果一个对象没有定义这个方法,仍然可以使用spl_object_hash函数来产生一个字符串表示。
我有一个基础Object类,其中包含一个这个函数返回对象的唯一标识符。这个id可以用作存储对象的哈希键,或者用于标识一个对象,只要对象没有被销毁。一旦对象被销毁,它的哈希可能会被重用于其他对象。
__toString
方法,默认调用md5(spl_object_hash($this))
使输出明显独特,因为spl_object_hash的输出在对象之间看起来非常相似。// Java
String myText = (string) myVar;
// PHP
$myText = (string) $myVar;
// 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"
$no = 421337 // A number in PHP
$str = "$no"; // In PHP, the 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
在之前的回答中,一些甚至所有的方法在意图转换的字符串变量有一个前导零(例如077543)时会失败。
尝试转换这样的变量无法得到预期的字符串,因为该变量被转换为八进制(base 8)。
所有这些都将使$str
具有值32611:
$no = 077543
$str = (string)$no;
$str = "$no";
$str = print_r($no,true);
$str = strval($no);
$str = settype($no, "integer");
print 077543;
输出32611
,所以这是$no
的正确字符串值。没有人会预料到(string)+1
返回字符串+1
(它会正确地返回1
),也不会预料到$no = 1+1; print (string)$no;
输出1+1
。注意:(1)十六进制也是一样的($no=0xff;
)。 (2)您可以使用'0'.decoct($no);
获取八进制值。(3)$no="077543";
保留前导零,“077543+1”给出77544
,而077543+1
(正确地)给出32612
。(PS:由于这个错误很常见,所以没有被downvote) - Tino$parent_category_name = "new clothes & shoes";
// To make it to string option one
$parent_category = strval($parent_category_name);
// Or make it a string by concatenating it with 'new clothes & shoes'
// It is useful for database queries
$parent_category = "'" . strval($parent_category_name) . "'";
strval()
只是浪费时间。 - Tino您可以随时创建一个名为.ToString($in)的方法,该方法返回
$in . '';
如果你要转换的不是像整数或布尔值这样的简单类型,那么你需要为你要转换的类型编写自己的函数/方法,否则PHP将只打印类型(例如数组、GoogleSniffer或Bidet)。
json_encode($myText)
。我发现建议的解决方案print_r
和(string)var
对于标量值和简单对象效果很好。对于复杂变量、类或对象,如果没有定义完整的__toString()
,我更喜欢前面提到的json_encode
。 - Eric Kigathi