我不确定标题应该是什么,但是代码应该更好地解释它:
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
中的字符串一起使用 最佳答案
操作发生的顺序很重要:
++
运算符增加lval
的zval
(长值),但通常不执行其他任何操作。对象指针保持不变。内部(fast_)increment_function
将被zval
调用,该zval
具有指向对象的指针,该对象首先检查类型。如果是对象,则不执行任何操作。因此,当__toString
是一个对象时,它与无操作一样有用。这不会输出任何警告。 20
方法被调用并返回20
。 关于php - "__toString"的增量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16375331/