Joe
Joe

Reputation: 111

__construct() vs method with same name as class

I have recently started php and was wondering the differences between __construct() and having a method with the same name as the class?

Is there a reason for using it? All I can work out is it overrides the method named Foo or is it down to which you prefer?

E.g.

class Foo {

    function Foo()
    {
       echo 'Foo stated<br>';
    }

    function __construct() {
       echo 'Construct started<br>';
    }
}

Thanks

Upvotes: 11

Views: 4087

Answers (5)

webbiedave
webbiedave

Reputation: 48897

Is there a reason for using it? All I can work out is it overrides the method named Foo or is it down to which you prefer?

The benefits of __construct() become clearer when you involve renaming and inheritance. If you rename a class, you then have to rename it's constructor. No big deal, but if class B inherits from class A you could end up with:

class B extends A {
    function B() {
        parent::A();
    }
}

It's much easier and more maintainable to do:

function __construct() {
    parent::__construct();
}

Now when you rename class A, you don't have to remember to also change the parent calls in all its children. Granted, there's still renaming to do in your code but at least this is not one of them.

Upvotes: 3

Peter Ajtai
Peter Ajtai

Reputation: 57685

Using __construct() is the newer PHP5 more OOP focused method to call a constructor. Using a method with the same name as the class is the old deprecated way to do it, and it will not function as a constructor as of PHP 5.3.3 for namespaced classes.

From the constructors and destructors page:

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. Effectively, it means that the only case that would have compatibility issues is if the class had a method named __construct() which was used for different semantics.

Unlike with other methods, PHP will not generate an E_STRICT level error message when __construct() is overridden with different parameters than the parent __construct() method has.

As of PHP 5.3.3, methods with the same name as the last element of a namespaced class name will no longer be treated as constructor. This change doesn't affect non-namespaced classes.

Upvotes: 9

Mark Baker
Mark Baker

Reputation: 212402

Having a method with the same name as the class, which is automatically called as a constructor is a throwback to PHP4, and is to be considered deprecated... in the latest development branch of PHP, it will be treated as a normal class method. __construct is the formally accepted constructor in PHP5, although in current releases it will fall back to the PHP4 method if __construct doesn't exist.

Upvotes: 0

Robert
Robert

Reputation: 21388

"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. Effectively, it means that the only case that would have compatibility issues is if the class had a method named __construct() which was used for different semantics."

Source: http://www.php.net/manual/en/language.oop5.decon.php

Upvotes: 7

Sergey Eremin
Sergey Eremin

Reputation: 11080

Foo() is a php4 way(deprecated), __construct() is php5 way. php will first look for __construct, then, if it's not found, it will use Foo

Upvotes: 3

Related Questions