如何将PHP变量的值转换为字符串?
我正在寻找比用空字符串连接更好的东西:
$myText = $myVar . '';
就像ToString()
Java或.NET中的方法一样.
您可以使用铸造操作符:
$myText = (string)$myVar;
在PHP手册的Strings部分中有更多关于字符串转换和转换的细节,包括对布尔值和空值的特殊处理.
这是通过类型转换完成的:
$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);
使用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);
你可以使用类型转换:
$var = (string)$varname;
或StringValue:
$var = strval($varname);
或SetType:
$success = settype($varname, 'string'); // $varname itself becomes a string
他们都在Type-Juggling方面做同样的事情.
如何将PHP变量的值转换为字符串?
可以使用(string)强制转换或strval()函数将值转换为字符串.(编辑:托马斯也说过).
当您将其用作字符串时,它也应该自动为您呈现.
你正在寻找strval:
string strval ( mixed $var )
获取变量的字符串值.有关转换为字符串的更多信息,请参阅有关字符串的文档.
此函数不对返回的值执行格式化.如果您正在寻找一种将数值格式化为字符串的方法,请参阅sprintf()或number_format().
对于基元,只需立即使用(string)$var
或打印此变量即可.PHP是动态类型语言,变量将被动态转换为字符串.
如果要将对象转换为字符串,则需要定义__toString()
返回字符串的方法.禁止此方法抛出异常.
将它放在双引号中应该有效:
$myText = "$myVar";
我认为值得一提的是,您可以通过使用输出缓冲来捕获变量中的任何输出(如print_r
,var_dump
):
感谢:https: //stackoverflow.com/a/139491/987864
另一种选择是使用内置的settype函数:
与类型转换不同,这实际上对变量执行转换,并允许您具有转换为多种类型的一般方法.
除了Thomas G. Mayfield给出的答案:
如果您按照字符串铸造手册的链接,有一个特殊情况,这是非常重要的理解:
(字符串)强制转换是更可取的,特别是如果你的变量$ a是一个对象,因为PHP将根据其对象模型通过调用__toString()魔术方法来遵循转换协议(如果在类中定义了$ a,则实例化了$ a) ).
PHP做了类似的事情
function castToString($instance) { if (is_object($instance) && method_exists($instance, '__toString')) { return call_user_func_array(array($instance, '__toString')); } }
的(字符串)铸造操作更加面向对象为PHP5 +编程使代码的推荐技术.IMO这是与其他OOP语言(如Java/C#/等)的设计相似性(差异)的一个很好的例子,即以其自己的特殊PHP方式(无论是为了好还是为了价值).
正如其他人所提到的,对象需要一个__toString
方法来强制转换为字符串.没有定义该方法的对象仍然可以使用spl_object_hash函数生成字符串表示.
此函数返回对象的唯一标识符.只要对象未被销毁,该id就可以用作存储对象或用于识别对象的散列键.一旦对象被销毁,其哈希可以重用于其他对象.
我有一个基类Object类,__toString
其默认调用方法md5(spl_object_hash($this))
使输出明显唯一,因为spl_object_hash的输出在对象之间看起来非常相似.
这对于调试变量初始化为Object的代码以及稍后在代码中怀疑已更改为其他Object的代码特别有用.简单地将变量回显到日志可以揭示对象散列(或不是)的变化.
如果预期的字符串变量的前导零(例如077543),则先前答案中的某些(如果不是全部)方法将失败。
尝试转换此类变量无法获得预期的字符串,因为该变量已转换为以8为基数(八进制)。
所有这些将使$str
值成为32611:
$no = 077543 $str = (string)$no; $str = "$no"; $str = print_r($no,true); $str = strval($no); $str = settype($no, "integer");