PHP相当于.NET / Java的toString()

时间:2008-08-26 13:56:50

标签: php string

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

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

$myText = $myVar . '';

与Java或.NET中的ToString()方法类似。

25 个答案:

答案 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)

  

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

可以使用(string) caststrval()函数将值转换为字符串。 (编辑:正如Thomas所述)。

当您将其用作字符串时,它也应该自动为您呈现。

答案 5 :(得分:27)

您正在寻找strval

  

string strval ( mixed $var )

     

获取变量的字符串值。   请参阅有关字符串的文档   有关转换为的更多信息   字符串。

     

此功能不执行格式化   在返回的值上。如果你是   寻找格式化数字的方法   值作为字符串,请参阅   sprintf()或number_format()。

答案 6 :(得分:17)

对于基元,只需使用(string)$var或立即打印此变量。 PHP是动态类型语言,变量将被动态转换为字符串。

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

答案 7 :(得分:15)

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

$myText = "$myVar";

答案 8 :(得分:10)

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

<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>

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

答案 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'

“给出字符串表示形式”是什么意思? 想象一下一个拥有数百万本书的图书馆课程。

  • 将此类铸造为String会(默认情况下)会将数据(这里是所有书籍)转换为字符串,因此String会很长,而且大多数时候不是很有用。
  • 要插入String,将为您提供String表示形式,即仅提供库的名称。这是较短的,因此为您提供的信息较少,但更为重要。

这两个都是有效的方式,但目标却非常不同,尼格特是每种情况的完美解决方案,您必须明智地选择最适合自己的需求。

当然,还有更多选择:

$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)

文档说你也可以这样做:

$str = "$foo";

与演员阵容相同,但我觉得它看起来更漂亮。

来源:

答案 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)

我使用variableToString

https://github.com/lingtalfi/VariableToString

它处理每种php类型并且非常灵活(如果需要,可以扩展它)