为什么PHP类型转换与其他函数不同


Why is PHP typecasting different from another functions?

PHP中的函数是以变量$bar为参数,像这样构造的foo($bar)。当您想将$bar的值转换为布尔值或字符串时,您需要执行以下操作:

(string)$bar;

考虑到其他函数的语法,我觉得有点奇怪。与许多其他语言相比,为什么PHP中的类型转换是这样执行的,比如

ToString($bar);

例如。我想更好地理解这种语言的句法设计。

(string)是内部的实际数据类型。所以考虑一下这个

$bar = 0; //int
$foo = '0'; //string

string转换所做的只是尝试从该值中生成一个字符串。换句话说,它只是将数字转换为对应的字符。它本身不适用于像array 这样的构造

$bar = [0];
echo (string)$bar; // E_NOTICE: array to string conversion, outputs 'Array'

现在,按照你的问题,对象可以有一个神奇的方法__toString()

class Foo {
    protected $bar = 'Hi';
    public function __toString() {
        return $this->bar;
    }
}
$x = new Foo();
echo (string)$x; // outputs 'Hi'

当我们试图将Foo对象转换为字符串时,它会调用神奇的方法