gpt4 book ai didi

php - 增量为 "__toString"

转载 作者:可可西里 更新时间:2023-10-31 23:03:04 24 4
gpt4 key购买 nike

我不确定标题应该是什么,但代码应该更好地解释它:

class Group {
private $number = 20;

public function __toString() {
return "$this->number";
}
}

$number = new Group();
echo $number, PHP_EOL;
echo ++ $number, PHP_EOL;

echo PHP_EOL;

$number = "20";
echo $number, PHP_EOL;
echo ++ $number, PHP_EOL;

echo PHP_EOL;

$number = 20;
echo $number, PHP_EOL;
echo ++ $number, PHP_EOL;

输出:

20
20 <--- Expected 21

20
21

20
21

知道为什么我得到 20而不是 21 ?即使这样,下面的代码仍然有效:

$i = null ;
echo ++$i ; // output 1

我知道Group是一个实现 __toString 的对象,我期待++使用 __toString 中的字符串或至少 throw an error

最佳答案

操作发生的顺序很重要:

  1. 变量将作为对象获取,不会转换为整数(或其他类型)。

  2. ++ 运算符递增 zvallval(长值),但通常不执行任何其他操作。对象指针保持不变。内部 (fast_)increment_function 将使用具有指向对象的指针的 zval 调用,它首先检查类型。如果它是一个对象,它什么都不做。所以当你的 zval 是一个对象时,它和无操作一样有用。这不会输出任何警告。

  3. 然后 echo 指令才对其参数执行字符串转换:调用 __toString 方法并返回 20

  4. 20 将被输出。

关于php - 增量为 "__toString",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16375331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com