Имя функции ООП, действующее как __construct, когда его имя совпадает с именем класса - PullRequest
0 голосов
/ 11 февраля 2010

Бит длинное название, сводится к этому:

<?php

    class error
    {

        public function error($errormsg = false, $line = false)
        {

            echo 'errormsg: '.$errormsg.' on line: '.$line;

        }

    }

?>

Когда я вызываю этот класс в другом файле, например:

<?php

    $error = new error;

?>

Он уже выполняет эхо в функции «ошибка». Наследует ли функция то же поведение, что и __construct, когда ее имя совпадает, или я просто пропустил что-то действительно глупое (я начинающий оператор :))

Tnx заранее

Ответы [ 4 ]

3 голосов
/ 11 февраля 2010

Это:

   class error
    {

        public function error($errormsg = false, $line = false)
        {

            echo 'errormsg: '.$errormsg.' on line: '.$line;

        }

    }

это php4 способ сделать это, рассмотрим:

   class error
    {

        public function __construct($errormsg = false, $line = false)
        {

            echo 'errormsg: '.$errormsg.' on line: '.$line;

        }

    }

Оба делают то же самое, первый из них php4 , а позже - php5 way.

1 голос
/ 11 февраля 2010

Это то же самое, что и функция __construct().

См. Руководство по PHP:

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

Если вы объявляете обе функции, __construct() вызывается в PHP5, а error() вызывается в PHP4

.
1 голос
/ 11 февраля 2010

Да, он ведет себя так же, как __construct()

Это связано с тем, что во многих других реализациях ООП на других языках используется то же имя. Таким образом, PHP следует этому и, таким образом, делает это следующим образом.

1 голос
/ 11 февраля 2010

В PHP4 конструкторы имели то же имя, что и класс. Я считаю, что если вы определите функцию __construct, это должно предотвратить вызов конструктора стиля PHP4. Это поведение задокументировано на странице руководства constructors PHP и является единственным способом предотвращения вызова конструкторов стиля PHP4, если не требуется редактировать исходный код PHP и перестраивать его.

Другое решение - переименовать метод. error::error выглядит немного странно для меня. Рассмотрим что-то вроде error::log или error:report, которые кажутся более подходящими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...