560

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

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

$myText = $myVar . '';

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

4

25 回答 25

791

您可以使用强制转换运算符

$myText = (string)$myVar;

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

于 2008-08-26T14:01:50.047 回答
310

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

$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);
于 2008-08-26T14:11:01.197 回答
127

使用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);
于 2010-08-24T17:31:52.433 回答
58

您可以使用类型转换:

$var = (string)$varname;

或字符串值:

$var = strval($varname);

或设置类型:

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

就类型杂耍而言,它们都为同一件事工作。

于 2010-01-02T08:51:14.100 回答
33

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

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

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

于 2008-08-26T14:00:48.460 回答
28

您正在寻找strval

string strval ( mixed $var )

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

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

于 2009-12-20T15:24:10.867 回答
18

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

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

于 2008-08-26T14:15:46.787 回答
15

将其放在双引号中应该可以:

$myText = "$myVar";
于 2008-08-26T13:58:02.087 回答
11

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

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

感谢: 如何将 var_dump 的结果捕获到字符串中?

于 2014-02-25T23:28:41.220 回答
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)
?>

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

于 2011-03-07T12:38:59.323 回答
8

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

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

(string) cast 是更可取的,特别是如果您的变量$a是一个对象,因为 PHP 将通过调用__toString()魔术方法根据其对象模型遵循转换协议(如果该方法是在 $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 方式(无论是为了好还是为了价值)。

于 2012-05-06T18:28:41.120 回答
8

正如其他人所提到的,对象需要一种__toString方法来转换为字符串。未定义该方法的对象仍然可以使用spl_object_hash函数生成字符串表示形式。

此函数返回对象的唯一标识符。这个 id 可以用作存储对象的哈希键,或者用于标识对象,只要对象没有被破坏。一旦对象被销毁,它的哈希值就可以被其他对象重用。

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

这对于调试一个变量初始化为对象的代码特别有帮助,后来在代码中怀疑它已更改为不同的对象。简单地将变量回显到日志可以揭示对象散列的变化(或不)。

于 2016-08-31T21:21:50.767 回答
7

我认为这个问题有点误导,因为 Java 中的 toString() 不仅仅是一种将某些东西转换为字符串的方法。这就是通过 (string) 或 String.valueOf() 进行的强制转换,它在 PHP 中也同样有效。

// Java
String myText = (string) myVar;

// PHP
$myText = (string) $myVar;

请注意,这可能会产生问题,因为 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";
    }
}

从另一边:

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

// PHP
strval(new SomeClass); // "Some string representation"

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

  • 将该类转换为字符串(默认情况下)会将数据(此处为所有书籍)转换为字符串,因此字符串会很长,而且大多数时候也不是很有用。
  • 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

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

于 2018-12-21T11:08:38.017 回答
6

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

尝试转换此类变量无法获得预期的字符串,因为该变量已转换为base 8 (octal)

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

$no = 077543
$str = (string)$no;
$str = "$no";
$str = print_r($no,true);
$str = strval($no);
$str = settype($no, "integer");
于 2014-05-19T08:09:54.017 回答
3

该文档说您还可以执行以下操作:

$str = "$foo";

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

来源:

于 2013-11-15T22:45:49.017 回答
1

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

$in . '';  
于 2008-08-26T13:59:23.470 回答
1

如果您要转换的不是简单类型(如整数或布尔值),则需要为要转换的类型编写自己的函数/方法,否则 PHP 只会打印类型(例如数组、GoogleSniffer ,或坐浴盆)。

于 2008-08-26T14:03:35.270 回答
1

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

于 2008-08-26T14:04:33.457 回答
1

双引号也应该起作用......它应该创建一个字符串,然后它应该在两个空字符串之间追加/插入 $myVar 的转换字符串值。

于 2011-07-31T18:25:25.817 回答
1

您还可以使用var_export PHP 函数。

于 2015-08-11T13:06:13.140 回答
1
$parent_category_name = "new clothes & shoes";

// To make it to string option one
$parent_category = strval($parent_category_name);

// Or make it a string by concatenating it with 'new clothes & shoes'
// It is useful for database queries
$parent_category = "'" . strval($parent_category_name) . "'";
于 2016-06-09T12:04:02.307 回答
0

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

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

error_log(json_encode($args));
于 2013-04-03T17:44:36.993 回答
0

试试这个有点奇怪但有效的方法来将 stdClass 的文本部分转换为字符串类型:

$my_std_obj_result = $SomeResponse->return->data; // Specific to object/implementation

$my_string_result = implode ((array)$my_std_obj_result); // Do conversion
于 2014-02-25T14:09:33.163 回答
0

__toString 方法或(字符串)强制转换

$string=(string)$variable;  //force make string 

您可以将对象视为字符串


class Foo
{

  public function __toString()
  {
     return "foo";
  }

}

echo new Foo(); //foo

另外,还有另一个技巧,我假设我有 int 变量我想把它变成字符串


$string=''.$intvariable;
于 2020-10-12T17:53:28.987 回答
-1

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

于 2015-10-28T12:47:43.430 回答