stalkerru 发表于 2013-6-24 01:20:57

为什么实例化模型类之后先执行父类的构造函数?

我写了个自己的模型类所有模型类都基于这个模型
class MY_Model extends CI_Model
public $table;
public function __construct()
{
   $this->table = '456';
   echo $this->table;
   parent::__construct();
}

class User_model extends MY_Model
{
public function __construct()
{
    $this->table = '123';
    echo $this->table;
    parent::__construct();
}
}

$this->load->model('user_model');


为什么执行结果是“456123”而不是"123456"?

ghost2006n 发表于 2013-6-24 08:54:28

虽然小的学艺不精,入门级别,但是看这个代码,第一个构造函数里已经输出了456,第二个构造函数又输出了123,那连起来不是456123吗,程序不是按照逐行语句执行的吗?

Raphael 发表于 2013-6-24 10:26:18

因為你使用了繼承,且你把它放在建構子裏,繼承後當然是先執行建構子,所以456就跑出來了.

stalkerru 发表于 2013-6-24 11:27:31

Raphael 发表于 2013-6-24 10:26 static/image/common/back.gif
因為你使用了繼承,且你把它放在建構子裏,繼承後當然是先執行建構子,所以456就跑出來了. ...

我知道我使用了继承啊    但是继承的意义是用父类来实例化类的吗?

Hex 发表于 2013-6-24 11:41:52

注意:parent::__construct();

你手动执行了父类构造函数,否则 PHP 是不会自动帮你执行的。

stalkerru 发表于 2013-6-24 15:00:27

Hex 发表于 2013-6-24 11:41 static/image/common/back.gif
注意:parent::__construct();

你手动执行了父类构造函数,否则 PHP 是不会自动帮你执行的。 ...
是啊不过我是先把成员变量赋值为123之后才执行父类的构造函数把它变成456的啊   为什么实际情况是先执行了父类的构造函数然后才执行子类的构造函数?


http://codeigniter.org.cn/forums/data/attachment/album/201306/24/150006oj99mfr63bhffb3d.gif

Hex 发表于 2013-6-24 16:00:26

stalkerru 发表于 2013-6-24 15:00 static/image/common/back.gif
是啊不过我是先把成员变量赋值为123之后才执行父类的构造函数把它变成456的啊   为什么实际情况是先执行 ...

这个貌似是有点奇怪,你的 PHP 版本是?

stalkerru 发表于 2013-6-25 09:30:51

php版本是5.4   

Raphael 发表于 2013-6-25 10:20:47

class MY_Model {
        public $table;
        public function __construct()
        {
           $this->table = '456';
           echo $this->table;
           parent::__construct();
        }
}
class User_model extends MY_Model
{
        public function __construct()
        {
                $this->table = '123';
                echo $this->table;
                parent::__construct();
        }
}

$obj =new User_model;

mckee1990 发表于 2013-6-25 10:29:07

看起来应该是 123456
页: [1] 2
查看完整版本: 为什么实例化模型类之后先执行父类的构造函数?