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"
但正如我所说,这是Casting,因此不等同于Java的toString() . Java中的toString doesn't just cast an object to a String, it insted will give you the String representation . 那就是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 StrValTest);//'some string representation'
$no = 77543 //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
//as you said
$str = $no . '';
$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)."'";
24 回答
我认为值得一提的是,您可以通过使用输出缓冲来捕获变量中的任何输出(如
print_r
,var_dump
):谢谢:https://stackoverflow.com/a/139491/987864
另一种选择是使用内置的settype函数:
与类型转换不同,这实际上对变量执行转换,并允许您具有转换为多种类型的一般方法 .
我使用variableToString
https://github.com/lingtalfi/VariableToString
它处理每种PHP类型并且是灵活的(你可以根据需要扩展它)
你可以使用casting operators:
PHP手册的Strings section中有更多关于字符串转换和转换的细节,包括对布尔值和空值的特殊处理 .
这是通过类型转换完成的:
在类中,您可以使用神奇的方法__toString定义输出内容 . 一个例子如下:
一些更多类型的铸造示例:
使用 print_r :
你也可以使用喜欢
这会将
$myText
设置为一个字符串,如:使用 var_export 获取更多信息(包含变量类型,......):
你可以使用类型转换:
或StringValue:
或SetType:
他们都在Type-Juggling方面做同样的事情 .
可以使用(string) cast或strval()函数将值转换为字符串 . (编辑:如Thomas也说明) .
当您将其用作字符串时,它也应该自动为您呈现 .
您正在寻找strval:
对于基元,只需使用
(string)$var
或立即打印此变量 . PHP是动态类型语言,变量将被动态转换为字符串 .如果要将对象转换为字符串,则需要定义返回字符串的
__toString()
方法 . 禁止此方法抛出异常 .将它放在双引号中应该有效:
除了Thomas G. Mayfield给出的答案:
如果您按照字符串铸造手册的链接,有一个特殊情况,这是非常重要的理解:
(字符串)强制转换是更可取的,特别是如果您的变量 $a 是一个对象,因为PHP将根据其对象模型通过调用 __toString() magic方法跟随转换protocol(如果这样在$ a实例化的类中定义) .
PHP做了类似的事情
(字符串)转换操作是PHP5编程的推荐技术,使代码更加面向对象 . IMO这是与其他OOP语言(如Java / C#/等)的设计相似性(差异)的一个很好的例子,即以其自己的特殊PHP方式(无论是为了好还是为了 Value ) .
正如其他人所提到的,对象需要一个
__toString
方法来强制转换为字符串 . 没有定义该方法的对象仍然可以使用spl_object_hash函数生成字符串表示 .我有一个带有
__toString
方法的基类Object类,默认调用md5(spl_object_hash($this))
使输出明显唯一,因为spl_object_hash的输出在对象之间看起来非常相似 .这对于调试变量初始化为Object的代码以及稍后在代码中怀疑已更改为其他Object的代码特别有用 . 简单地将变量回显到日志可以揭示对象散列(或不是)的变化 .
当预期的字符串变量具有前导零时,一些(如果不是全部)上述方法都失败,即077543尝试转换此类变量无法获得预期的字符串,因为该变量被转换为基数8(八进制) .
所有这些都会使
$str
的值为32611文档说你也可以这样做:
它与演员阵容相同,但我觉得它看起来更漂亮 .
资源:
Russian
English
我认为这个问题有点误导,因为Java中的toString()不仅仅是一种向String强制转换的方法,也就是casting via(string)或String.valueOf()的作用,它在PHP中运行良好 .
请注意,这可能是有问题的,因为Java是typesave . See Here For more Details
但正如我所说,这是Casting,因此不等同于Java的toString() . Java中的toString doesn't just cast an object to a String, it insted will give you the String representation . 那就是PHP中的__toString()
而从另一方面:
“赋予字符串表示”是什么意思?想象一下拥有数百万本书的图书馆 .
将该类转换为String(默认情况下)会将数据(此处为所有书籍)转换为字符串,因此String将非常长并且大部分时间都不是非常有用 .
To String insted将为您提供String重复表示,即只提供libary的名称 . 这个更短,因此为您提供更少但更重要的信息 .
这些都是有效的aproches,但目标非常不同,neigter是每个案例的完美解决方案,你必须明智地满足你的需求 .
Sure there are even more options:
所有这些方法都将返回一个String,其中一些使用__toString internaly,其他一些将在Objcts上失败 .
双引号也应该起作用......它应该创建一个字符串,然后它应该在两个空字符串之间APPEND / INSERT $ myVar的转换STRING值 .
您始终可以创建一个返回的名为.ToString($ in)的方法
如果你要转换除整数或布尔等简单类型之外的任何东西,你需要为你想要转换的类型编写自己的函数/方法,否则PHP只会打印类型(例如数组,GoogleSniffer) ,或坐浴盆) .
PHP是动态类型的,所以像Chris Fournier所说,"If you use it like a string it becomes a string" . 如果您正在寻找对字符串格式的更多控制,那么printf就是您的答案 .
你也可以使用var_export php函数 .
对于对象,您可能无法使用强制转换运算符 . 相反,我使用
json_encode()
方法 .例如,以下内容将输出内容到错误日志:
试试这个奇怪但有效的方法将stdClass的文本部分转换为字符串类型: