以下是代码示例:
class Empolyee{
static public $nextID = 1;
public $ID;
public function __construct(){
$this->ID = self::$nextID++;
}
public function NextID(){
return self::$nextID;
}
}
$bob = new Employee;
$jan = new Employee;
$simon = new Employee;
print $bob->ID . "\n";
print $jan->ID . "\n";
print $simon->ID . "\n";
print Employee::$nextID . "\n";
print Eployee::NextID() . "\n";
上面的代码返回1,2,3,4,4
但是为此我误解它应该返回2,3,4,5,5
,因为在类Employee中$nextID
的值是 1 然后在创建新对象时,会自动启动构造函数,就好像值增加1 一样。因此,在创建第一个对象$bob
时,此处应返回1 + 1 = 2 。请明确这个概念。感谢。
答案 0 :(得分:1)
参考:http://www.php.net/manual/en/language.operators.increment.php
Example Name Effect
++$a Pre-increment Increments $a by one, then returns $a.
$a++ Post-increment Returns $a, then increments $a by one.
所以在你的情况下,它总是在将它添加1之前返回当前的$ nextID。
答案 1 :(得分:0)
$this->ID = self::$nextID++; is POST INCREMENT
将$ bob的$ ID设置为1,然后将$ nextID增加到2(增量为AFTER(POST),分配完成 - 即。它与:
相同$this->ID = self::$nextID;
self::$nextID = self::$nextID + 1
这个循环他们重复@jan然后$ simon
如果要在分配之前增加ID,请使用PRE INCREMENT
$this->ID = ++self::$nextID;