Codeigniter constructors. What is the difference?

2019-03-20 15:54发布

问题:

I see two types of contructors in CI. For instance...

class Blog extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
    }
}

and

class Blog extends CI_Controller
{
       function Blog()
       {
                parent::Controller();
       }
}

What is the difference between them? I'm not sure which to choose.

回答1:

If you are using Codeigniter 2+ (which you should be)... The second option will not work, as it uses the PHP4 style constructor calls.

Actually, the second option wouldn't work anyway because the php4 constructor call needs to match the class you're extending...

So yeah, use the first one. It uses PHP5 style constructor calls.

For more information on PHP5 constructors



回答2:

Using a function with the name __construct() is the way constructors are written in PHP 5.

Using a function that has the same name as the class is the way constructors were written in PHP 4 (and, for compatibility reasons, those still work in PHP 5 -- even if you should prefer __construct())


As a reference, take a look at Constructors and Destructors -- quoting a portion of it :

For backwards compatibility, if PHP 5 cannot find a __construct() function for a given class, it will search for the old-style constructor function, by the name of the class.



回答3:

It looks like the first one is a php 5 implementation and second one is a php 4 implementation.



回答4:

php 5 has changed the way constructors are called and used and you should use the second option. I think this is not specific to codeigniter and general to php5