__construct() против метода с тем же именем, что и класс

Я недавно запустил php и задавался вопросом о различиях между __construct() и имел метод с тем же именем, что и класс?

Есть ли причина для его использования? Все, что я могу сделать, это переопределить метод с именем Foo или это то, что вам нравится?

например.

class Foo {

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

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

Спасибо

Ответ 1

Использование __construct() - это более новый PHP5 метод с большим количеством ООП для вызова конструктора. Использование метода с тем же именем, что и класс, является старым устаревшим способом его выполнения, и он не будет функционировать как конструктор PHP 5.3.3 для классов с именами.

От страница конструкторов и деструкторов:

Для обратной совместимости, если PHP 5 не может найти функцию __construct() для данного класса, он будет искать функцию конструктора старого стиля по имени класса. Фактически это означает, что единственный случай, который имел бы проблемы с совместимостью, заключается в том, что у класса был метод с именем __construct(), который использовался для различной семантики.

В отличие от других методов PHP не генерирует сообщение об ошибке уровня E_STRICT, когда __construct() переопределяется с разными параметрами, чем у родительского метода __construct().

Начиная с PHP 5.3.3, методы с тем же именем, что и последний элемент имени пространства имен, больше не будут рассматриваться как конструктор. Это изменение не влияет на классы, не содержащие имен.

Ответ 2

", если PHP 5 не может найти функцию __construct() для данного класса, он будет искать функцию конструктора старого стиля по имени класса. Фактически это означает, что единственный случай, который имел бы проблемы с совместимостью если класс имеет метод с именем __construct(), который использовался для различной семантики."

Источник: http://www.php.net/manual/en/language.oop5.decon.php

Ответ 3

Foo() является способом php4 (устаревшим), __construct() является способом php5. php сначала ищет __construct, тогда, если он не будет найден, он будет использовать Foo

Ответ 4

Есть ли причина для его использования? Все я может работать, это переопределяет метод с именем Foo или он до который вы предпочитаете?

Преимущества __construct() становятся яснее, когда вы включаете переименование и наследование. Если вы переименуете класс, вам придется переименовать его конструктор. Неважно, но если класс B наследует от класса A, вы можете в итоге:

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

Это намного проще и удобнее обслуживать:

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

Теперь, когда вы переименовываете класс A, вам не нужно забывать также изменять родительские вызовы во всех его дочерних элементах. Конечно, в вашем коде все еще переименовывается, но по крайней мере это не один из них.

Ответ 5

Наличие метода с тем же именем, что и класс, который автоматически вызывается как конструктор, является возвратом к PHP4 и считается устаревшим... в последней ветке разработки PHP, он будет рассматриваться как обычный класс способ. __construct является официально принятым конструктором в PHP5, хотя в текущих версиях он будет возвращаться к методу PHP4, если __construct не существует.