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

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

$myText = $myVar . '';

类似于Java或。net中的ToString()方法。


当前回答

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

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

其他回答

你可以使用强制转换操作符:

$myText = (string)$myVar;

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

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

当预期的字符串变量前导为0(例如077543)时,前面的回答中的一些(如果不是全部)方法会失败。

转换这样一个变量的尝试无法获得预期的字符串,因为变量被转换为以8为基数(八进制)。

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

$no = 077543
$str = (string)$no;
$str = "$no";
$str = print_r($no,true);
$str = strval($no);
$str = settype($no, "integer");
$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) . "'";

This can be difficult in PHP because of the way data types are handled internally. Assuming that you don't mean complex types such as objects or resources, generic casting to strings may still result in incorrect conversion. In some cases pack/unpack may even be required, and then you still have the possibility of problems with string encoding. I know this might sound like a stretch but these are the type of cases where standard type juggling such as $myText = $my_var .''; and $myText = (string)$my_var; (and similar) may not work. Otherwise I would suggest a generic cast, or using serialize() or json_encode(), but again it depends on what you plan on doing with the string.

主要的区别在于,Java和. net在处理二进制数据和基本类型以及从特定类型转换到/从特定类型转换到字符串方面有更好的功能,即使对用户抽象了特定的情况也是如此。PHP的情况则完全不同,即使是处理十六进制也会让你摸不着头脑,直到你掌握了它。

我想不出更好的方法来回答这个问题,这是可比Java/。NET中的_toString()和此类方法通常以特定于对象或数据类型的方式实现。在这种情况下,神奇的方法__toString()和__serialize()/__unserialize()可能是最好的比较。

还要记住,PHP没有基本数据类型的相同概念。从本质上讲,PHP中的每一种数据类型都可以被认为是一个对象,它们的内部处理程序试图使它们具有某种通用性,即使这意味着在将float转换为int时失去准确性。你不能像在Java中那样处理类型,除非你在本地扩展中使用它们的zvals。

While PHP userspace doesn't define int, char, bool, or float as an objects, everything is stored in a zval structure which is as close to an object that you can find in C, with generic functions for handling the data within the zval. Every possible way to access data within PHP goes down to the zval structure and the way the zend vm allows you to handles them without converting them to native types and structures. With Java types you have finer grained access to their data and more ways to to manipulate them, but also greater complexity, hence the strong type vs weak type argument.

这些链接可能会有帮助:

https://www.php.net/manual/en/language.types.type-juggling.php https://www.php.net/manual/en/language.oop5.magic.php