关于字符串:PHP相当于.NET / Java的toString()

PHP equivalent of .NET/Java's toString()

如何将PHP变量的值转换为字符串?

我在寻找比用空字符串连接更好的东西:

1
$myText = $myVar . '';

类似于Java或.NET中的EDCOX1 0Ω方法。


您可以使用铸造操作员:

1
$myText = (string)$myVar;

在PHP手册的字符串部分中有更多关于字符串转换和转换的详细信息,包括布尔值和空值的特殊处理。


这是通过打字来完成的:

1
2
3
$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定义输出内容。示例如下:

1
2
3
4
5
6
7
8
9
10
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"

更多类型的铸造示例:

1
2
3
4
5
6
7
8
9
10
$i = 1;

// int 1
var_dump((int) $i);

// bool true
var_dump((bool) $i);

// string"1"
var_dump((string) 1);


使用打印:

1
$myText = print_r($myVar,true);

你也可以用like

1
$myText = print_r($myVar,true)."foo bar";

这将把$myText设置为一个字符串,例如:

1
2
3
array (
  0 => '11',
)foo bar

使用var_export获取更多信息(使用变量类型,…):

1
$myText = var_export($myVar,true);


您可以使用类型转换:

1
$var = (string)$varname;

或字符串值:

1
$var = strval($varname);

或设置类型:

1
2
$success = settype($varname, 'string');
// $varname itself becomes a string

他们都为同样的事情工作在类型杂耍。


How do I convert the value of a PHP
variable to string?

可以使用(string)cast或strval()函数将值转换为字符串。(编辑:正如托马斯所说)。

当您将它用作字符串时,它也应该自动为您铸造。


您正在查找strval:

string strval ( mixed $var )

Get the string value of a variable.
See the documentation on string for
more information on converting to
string.

This function performs no formatting
on the returned value. If you are
looking for a way to format a numeric
value as a string, please see
sprintf() or number_format().


对于原语,只需使用(string)$var或直接打印该变量即可。PHP是动态类型语言,变量将被动态转换为字符串。

如果要将对象转换为字符串,则需要定义返回字符串的__toString()方法。禁止此方法引发异常。


把它放在双引号中应该有效:

1
$myText ="$myVar";


我认为值得一提的是,通过使用输出缓冲,您可以捕获变量中的任何输出(如print_rvar_dump

1
2
3
4
5
<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>

感谢:https://stackoverflow.com/a/139491/987864


另一个选项是使用内置的settype函数:

1
2
3
4
5
6
7
<?php
$foo ="5bar"; // string
$bar = true;   // boolean

settype($foo,"integer"); // $foo is now 5   (integer)
settype($bar,"string");  // $bar is now"1" (string)
?>

这实际上对变量执行了一个与类型转换不同的转换,并允许您有一种转换为多种类型的一般方法。


除了Thomas G.Mayfield给出的答案外:

如果您遵循字符串转换手册的链接,则有一个非常重要的特殊情况需要理解:

(string)CAST更可取,尤其是当变量$A是一个对象时,因为PHP将根据其对象模型调用uToString()magic方法(如果在实例化$A的类中定义了这种方法)来遵循CAST协议。

php的作用类似于

1
2
3
4
5
6
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函数生成字符串表示。

This function returns a unique identifier for the object. This id can be used as a hash key for storing objects, or for identifying an object, as long as the object is not destroyed. Once the object is destroyed, its hash may be reused for other objects.

我有一个带有__toString方法的基本对象类,它默认调用md5(spl_object_hash($this))使输出明显唯一,因为SPL对象哈希的输出在对象之间看起来非常相似。

这对于调试变量初始化为对象的代码特别有用,稍后在代码中,怀疑变量已更改为其他对象。简单地将var回送到日志中可以揭示对象散列(或不)的变化。


当预期的字符串变量具有前导零IE 077543时,上面的一些方法(如果不是全部)会失败。试图转换这样一个变量时,无法获得预期的字符串,因为该变量被转换为8进制(八进制)。

所有这些都将使$str的值为32611。

1
2
3
4
5
6
$no = 077543  
$str = (string)$no;  
$str ="$no";  
$str = print_r($no,true);  
$str = strval($no);  
$str = settype($no,"integer");


我认为这个问题有点误导,因为,Java中的ToString()不仅仅是将某个东西串到一个字符串中的方法,也就是通过String(String)或String。

1
2
3
4
//Java
String myText = (string) myVar;
//PHP
$myText = (string) $myVar;

请注意,这可能是有问题的,因为Java是类型化的。有关详细信息,请参阅此处

但正如我所说的,这是铸造,因此不等同于Java的ToStRun()。Java中的ToString不只是将一个对象投射到一个字符串中,它会给您提供字符串表示形式。这就是PHP中的

1
2
3
4
5
6
7
8
9
10
11
12
13
//Java
class SomeClass{
    public String toString(){
        return 'some string representation';
    }
}
//php
class SomeClass{
    public function __toString()
    {
        return 'some string representation';
    }
}

另一方面:

1
2
3
4
//Java
new SomeClass().toString();//'some string representation'
//PHP
strval(new SomeClass);//'some string representation'

"给出字符串表示"是什么意思?想象一下一个班上有数百万本书。

  • 将该类转换为字符串(默认情况下)会将数据(这里是所有书籍)转换为字符串,这样字符串将非常长,而且大多数时间都不是很有用。
  • to string insted将为您提供字符串表示,即只提供libary的名称。这是较短的,因此给你的信息较少,但更重要。

这两个都是有效的围裙,但有着不同的目标,奈特是一个完美的解决方案,每一个案件,你必须明智地巧克力适合你的需要。

当然还有更多的选择:

1
2
3
4
5
6
$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

所有这些方法都将返回一个字符串,其中一些方法使用内部字符串,另一些方法在objct上失败。请查看php文档了解更多详细信息。


文件上说你也可以:

1
$str ="$foo";

它和演员表一样,但我觉得它看起来更漂亮。

资料来源:

  • 俄语
  • 英语

也可以使用var_export php函数。


PHP是动态类型的,所以就像ChrisFournier说的,"如果你像使用字符串一样使用它,它就会变成字符串"。如果您正在寻找对字符串格式的更多控制,那么printf就是您的答案。


如果要转换除整数或布尔值等简单类型以外的任何类型,则需要为要转换的类型编写自己的函数/方法,否则PHP将只打印该类型(如数组、谷歌嗅探器或bidt)。


1
2
3
4
5
6
$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)."'";


始终可以创建名为.ToString($in)的方法,该方法返回

1
$in . '';


双引号也应该有效…它应该创建一个字符串,然后在两个空字符串之间追加/插入$myvar的强制转换字符串值。


对于对象,您可能无法使用强制转换运算符。相反,我使用json_encode()方法。

例如,以下内容将输出到错误日志:


尝试这种奇怪但有效的方法将stdclass的文本部分转换为字符串类型:

1
2
3
$my_std_obj_result = $SomeResponse->return->data; //specific to object/implementation

$my_string_result = implode ((array)$my_std_obj_result); //do conversion


我用variabletostring

https://github.com/lingtalfi/variabletostring

它可以处理每种PHP类型,并且很灵活(如果需要,您可以扩展它)