如何将PHP变量的值转换为字符串?
我一直在寻找比用空字符串连接更好的东西:
$myText = $myVar . '';
与Java或.NET中的ToString()
方法类似。
答案 0 :(得分:769)
您可以使用casting operators:
$myText = (string)$myVar;
PHP手册的Strings section中有更多关于字符串转换和转换的详细信息,包括对布尔值和空值的特殊处理。
答案 1 :(得分:299)
这是通过类型转换完成的:
$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);
答案 2 :(得分:123)
使用 print_r :
$myText = print_r($myVar,true);
您也可以使用
$myText = print_r($myVar,true)."foo bar";
这会将$myText
设置为字符串,例如:
array (
0 => '11',
)foo bar
使用 var_export 获取更多信息(包含变量类型,......):
$myText = var_export($myVar,true);
答案 3 :(得分:57)
您可以使用类型转换:
$var = (string)$varname;
或StringValue:
$var = strval($varname);
或SetType:
$success = settype($varname, 'string');
// $varname itself becomes a string
他们都在Type-Juggling方面做同样的事情。
答案 4 :(得分:32)
答案 5 :(得分:27)
您正在寻找strval:
string strval ( mixed $var )
获取变量的字符串值。 请参阅有关字符串的文档 有关转换为的更多信息 字符串。
此功能不执行格式化 在返回的值上。如果你是 寻找格式化数字的方法 值作为字符串,请参阅 sprintf()或number_format()。
答案 6 :(得分:17)
对于基元,只需使用(string)$var
或立即打印此变量。 PHP是动态类型语言,变量将被动态转换为字符串。
如果要将对象转换为字符串,则需要定义返回字符串的__toString()
方法。禁止此方法抛出异常。
答案 7 :(得分:15)
将它放在双引号中应该有效:
$myText = "$myVar";
答案 8 :(得分:10)
我认为值得一提的是,您可以使用输出缓冲来捕获变量中的任何输出(如print_r
,var_dump
):
<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>
答案 9 :(得分:7)
正如其他人所提到的,对象需要将__toString
方法强制转换为字符串。没有定义该方法的对象仍然可以使用spl_object_hash函数生成字符串表示。
此函数返回对象的唯一标识符。只要对象未被销毁,该id就可以用作存储对象或用于识别对象的散列键。一旦对象被销毁,其哈希就可以重用于其他对象。
我有一个带有__toString
方法的基类Object类,默认调用md5(spl_object_hash($this))
以使输出明显唯一,因为spl_object_hash的输出在对象之间看起来非常相似。
这对于调试变量初始化为Object的代码以及稍后在代码中怀疑已更改为其他Object的代码特别有用。简单地将变量回显到日志可以揭示对象散列(或不是)的变化。
答案 10 :(得分:7)
另一种选择是使用内置的settype函数:
<?php
$foo = "5bar"; // string
$bar = true; // boolean
settype($foo, "integer"); // $foo is now 5 (integer)
settype($bar, "string"); // $bar is now "1" (string)
?>
这实际上是对变量执行转换而不是类型转换,并且允许您使用转换为多种类型的一般方法。
答案 11 :(得分:7)
除了Thomas G. Mayfield给出的答案之外:
如果您点击字符串铸造手册的链接,有一个特殊情况需要理解:
如果您的变量 $ a 是一个对象,则(string)强制转换是优选的,因为PHP将根据其对象模型通过调用 __ toString()来跟随强制转换protocol 魔术方法(如果在实例化$ a的类中定义了这种方法)。
PHP做类似于
的事情function castToString($instance)
{
if (is_object($instance) && method_exists($instance, '__toString')) {
return call_user_func_array(array($instance, '__toString'));
}
}
(string)转换操作是PHP5 +编程的推荐技术,使代码更加面向对象。 IMO这是与其他OOP语言(如Java / C#/等)的设计相似性(差异)的一个很好的例子,即以其自己特殊的PHP方式(无论是为了好还是为了价值)。
答案 12 :(得分:5)
当预期的字符串变量具有前导零即077543 时,如果不是所有上述方法都失败了 转换此类变量的尝试无法获取预期的字符串,因为该变量已转换为 base 8(八进制)。
所有这些都会使$str
的值 32611
$no = 077543
$str = (string)$no;
$str = "$no";
$str = print_r($no,true);
$str = strval($no);
$str = settype($no, "integer");
答案 13 :(得分:3)
我认为这个问题有点误导,因为 Java中的toString()不仅是一种将某些内容转换为String的方式,这是casting通过(string)或String.valueOf()所做的工作,并且在PHP中效果很好。
//Java
String myText = (string) myVar;
//PHP
$myText = (string) $myVar;
请注意,这可能是有问题的,因为Java是类型保存的。 See Here For more Details
但是正如我所说的,这是Casting,因此与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'
“给出字符串表示形式”是什么意思? 想象一下一个拥有数百万本书的图书馆课程。
这两个都是有效的方式,但目标却非常不同,尼格特是每种情况的完美解决方案,您必须明智地选择最适合自己的需求。
当然,还有更多选择:
$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 concat an empty string works too
所有这些方法都将返回一个String,其中一些内部使用__toString,而另一些将在对象上失败,请查看PHP documenation以获得更多详细信息。
答案 14 :(得分:3)
答案 15 :(得分:1)
您始终可以创建一个名为.ToString($ in)的方法,该方法返回
$in . '';
答案 16 :(得分:1)
$parent_category_name = "new clothes & shoes" ;
//TO make it to string option one
$parent_category = strval($parent_category_name);
//Or make it string my concatenating it with 'new clothes & shoes'
//useful for database queries
$parent_category = "'".strval($parent_category_name)."'";
答案 17 :(得分:1)
你也可以使用var_export php函数。
答案 18 :(得分:1)
双引号也应该有效...它应该创建一个字符串,然后它应该在两个空字符串之间APPEND / INSERT $ myVar的转换STRING值。
答案 19 :(得分:1)
PHP是动态类型的,所以像Chris Fournier所说,“如果你像字符串一样使用它就会成为一个字符串”。如果您正在寻找对字符串格式的更多控制,那么printf就是您的答案。
答案 20 :(得分:1)
如果你要转换除整数或布尔等简单类型之外的任何东西,你需要为你想要转换的类型编写自己的函数/方法,否则PHP将只打印类型(例如array,GoogleSniffer或Bidet)。
答案 21 :(得分:0)
尝试使用这种奇怪但有效的方法将stdClass的文本部分转换为字符串类型:
$my_std_obj_result = $SomeResponse->return->data; //specific to object/implementation
$my_string_result = implode ((array)$my_std_obj_result); //do conversion
答案 22 :(得分:0)
对于对象,您可能无法使用强制转换运算符。相反,我使用json_encode()
方法。
例如,以下内容将输出内容到错误日志:
error_log(json_encode($args));
答案 23 :(得分:0)
__ toString方法或(字符串)强制转换
$string=(string)$variable; //force make string
您可以将对象视为字符串
class Foo
{
public function __toString()
{
return "foo";
}
}
echo new Foo(); //foo
还有另一个技巧,我假设我有一个int变量ı想把它做成字符串
$string=''.$intvariable;
答案 24 :(得分:-1)