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

Ant*_*bry 542 php string

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

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

$myText = $myVar . '';
Run Code Online (Sandbox Code Playgroud)

就像ToString()Java或.NET中的方法一样.

Tom*_*eld 780

您可以使用铸造操作符:

$myText = (string)$myVar;
Run Code Online (Sandbox Code Playgroud)

在PHP手册的Strings部分中有更多关于字符串转换和转换的细节,包括对布尔值和空值的特殊处理.

  • @MarkAmery他给出了一个隐式调用`__toString()`"Magic Method"的答案,但根本没有提到.用户要求的答案类似于Java`toString()`方法,而在PHP中,这就是`__toString()`函数. (28认同)
  • `类Foo的对象无法转换为字符串`.是否有一般解决方案可以将任何东西(数组+对象+任何东西)转换为字符串? (11认同)
  • 这就是答案 - http://stackoverflow.com/questions/28098/php-tostring-equivalent/3559247#3559247 (3认同)
  • 注意:这将在数组上使用时发出PHP通知. (2认同)
  • @Supuhstar啊对,我终于明白你来自哪里了.对不起,如果我以前是钝的.我同意这是一个相关的细节,添加它可能很有价值,也许将答案分为'转换基元'和'转换对象'部分和标题. (2认同)

Ros*_*oss 307

这是通过类型转换完成的:

$strvar = (string) $var; // Casts to string
echo $var; // Will cast to string implicitly
var_dump($var); // Will show the true type of the variable
Run Code Online (Sandbox Code Playgroud)

在类中,您可以使用魔法方法定义输出内容__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"
Run Code Online (Sandbox Code Playgroud)

一些更多类型的铸造示例:

$i = 1;

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

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

// string "1"
var_dump((string) 1);
Run Code Online (Sandbox Code Playgroud)


Ced*_*ric 126

使用print_r:

$myText = print_r($myVar,true);
Run Code Online (Sandbox Code Playgroud)

你也可以使用喜欢

$myText = print_r($myVar,true)."foo bar";
Run Code Online (Sandbox Code Playgroud)

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

array (
  0 => '11',
)foo bar
Run Code Online (Sandbox Code Playgroud)

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

$myText = var_export($myVar,true);
Run Code Online (Sandbox Code Playgroud)

  • “当返回参数为TRUE时,[print_r]将返回一个字符串。” 由于 print_r 是打印对象、数组(以及数字/字符串)的好方法,因此是将对象转换为人类可读字符串的好方法。 (2认同)

小智 58

你可以使用类型转换:

$var = (string)$varname;
Run Code Online (Sandbox Code Playgroud)

或StringValue:

$var = strval($varname);
Run Code Online (Sandbox Code Playgroud)

或SetType:

$success = settype($varname, 'string');
// $varname itself becomes a string
Run Code Online (Sandbox Code Playgroud)

他们都在Type-Juggling方面做同样的事情.


Chr*_*ris 33

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

可以使用(string)强制转换或strval()函数将值转换为字符串.(编辑:托马斯也说过).

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


ope*_*sas 28

你正在寻找strval:

string strval ( mixed $var )

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

此函数不对返回的值执行格式化.如果您正在寻找一种将数值格式化为字符串的方法,请参阅sprintf()或number_format().

  • 这实际上非常有用,因为我想在不使用自定义回调的情况下将所有数字转换为字符串.`$ strings = array_map('strval',$ my_numbers);` (3认同)

Mic*_*cki 18

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

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


Mar*_*iek 15

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

$myText = "$myVar";
Run Code Online (Sandbox Code Playgroud)


Daa*_*aan 11

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

<?php
    ob_start();
    var_dump($someVar);
    $result = ob_get_clean();
?>
Run Code Online (Sandbox Code Playgroud)

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


Jus*_*eks 8

另一种选择是使用内置的settype函数:

<?php
$foo = "5bar"; // string
$bar = true;   // boolean

settype($foo, "integer"); // $foo is now 5   (integer)
settype($bar, "string");  // $bar is now "1" (string)
?>
Run Code Online (Sandbox Code Playgroud)

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


Yau*_*ich 8

除了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'));
    }
}
Run Code Online (Sandbox Code Playgroud)

(字符串)铸造操作更加面向对象为PHP5 +编程使代码的推荐技术.IMO这是与其他OOP语言(如Java/C#/等)的设计相似性(差异)的一个很好的例子,即以其自己的特殊PHP方式(无论是为了好还是为了价值).


jim*_*imp 8

正如其他人所提到的,对象需要一个__toString方法来强制转换为字符串.没有定义该方法的对象仍然可以使用spl_object_hash函数生成字符串表示.

此函数返回对象的唯一标识符.只要对象未被销毁,该id就可以用作存储对象或用于识别对象的散列键.一旦对象被销毁,其哈希可以重用于其他对象.

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

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


小智 6

如果预期的字符串变量的前导零(例如077543),则先前答案中的某些(如果不是全部)方法将失败。

尝试转换此类变量无法获得预期的字符串,因为该变量已转换为以8基数(八进制)

所有这些将使$str值成为32611

$no = 077543
$str = (string)$no;
$str = "$no";
$str = print_r($no,true);
$str = strval($no);
$str = settype($no, "integer");
Run Code Online (Sandbox Code Playgroud)


Xan*_*tos 6

我认为这个问题有点误导,因为 Java 中的 toString() 不仅仅是将某些内容转换为 String 的方法。这就是铸造通过(字符串)或将String.valueOf()做,和它的作品,以及在PHP。

// Java
String myText = (string) myVar;

// PHP
$myText = (string) $myVar;
Run Code Online (Sandbox Code Playgroud)

请注意,这可能会有问题,因为 Java 是类型安全的(有关更多详细信息,请参见此处)。

但正如我所说,这是强制转换,因此不等同于 Java 的 toString()。

Java中的toString不只是将对象转换为字符串。相反,它会给你 String 表示。这就是PHP 中的__toString()所做的。

// Java
class SomeClass{
    public String toString(){
        return "some string representation";
    }
}

// PHP
class SomeClass{
    public function __toString()
    {
        return "some string representation";
    }
}
Run Code Online (Sandbox Code Playgroud)

而从另一边:

// Java
new SomeClass().toString(); // "Some string representation"

// PHP
strval(new SomeClass); // "Some string representation"
Run Code Online (Sandbox Code Playgroud)

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

  • 将该类转换为 String 会(默认情况下)将数据(此处为所有书籍)转换为字符串,因此 String 会很长,而且在大多数情况下也不是很有用。
  • To 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 concatenate an empty string works too
Run Code Online (Sandbox Code Playgroud)

所有这些方法都将返回一个字符串,其中一些在内部使用 __toString,而另一些将在对象上失败。有关更多详细信息,请查看PHP 文档