为什么我的构造函数工作不正确?

时间:2013-11-21 03:51:41

标签: php

以下是代码示例:

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 。请明确这个概念。感谢。

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;