Почему PHP 5 использует __contruct () вместо className () в качестве конструктора? - PullRequest
7 голосов
/ 06 октября 2009

Почему я должен использовать function __construct() вместо function className() в PHP 5?

Ответы [ 6 ]

27 голосов
/ 06 октября 2009

Магические методы / функции __, похоже, являются последовательной темой в PHP (на этот раз!). Одним из преимуществ использования __construct() над ClassName() в качестве конструктора является то, что если вы измените имя класса, вам не нужно обновлять конструктор.

4 голосов
/ 06 октября 2009

Поскольку он был объединен с помощью метода __destruct () и других специальных методов, начинающихся с двух подчеркиваний, например __get, __sleep, __serialize http://us2.php.net/manual/en/language.oop5.magic.php

4 голосов
/ 06 октября 2009

Потому что php5 хотел больше походить на python.

Я шучу, я шучу ...

Наличие стандартного метода для стандартных действий, таких как построение, является разумным решением. По той же причине, что в классах C # при расширении класса вы используете base для вызова конструкторов базового класса вместо именованного объекта: это упрощает код и облегчает обслуживание.

2 голосов
/ 06 октября 2009

Я думаю, что к тому времени, когда объектно-ориентированная возможность была добавлена ​​в PHP, дизайнеры уже смотрели на Python.

1 голос
/ 09 декабря 2009

Делая это всегда, вы можете вызывать конструктор из супер (базового) класса без необходимости знать его имя. Это очень полезно для поддержки дерева классов, потому что вам не нужно обновлять все ваши классы только потому, что вы переупорядочиваете деревья классов

и ... просто догадываясь ... если все классы называют свои конструкторы одинаково __construct (), теоретически конструктор может быть унаследован от суперкласса без какого-либо обязательного определения. Это имеет смысл в деревьях классов, где существуют промежуточные абстрактные классы, и в конструкциях, подобных цели C, где поведение конструктора по умолчанию полностью основано на метаданных класса, и поэтому (в принципе!) Вообще не требует кодирования.

0 голосов
/ 09 декабря 2009

Старый вопрос, но я укушу, так как на самом деле никто еще не ответил на настоящий вопрос.

Функция className () является конструктором в стиле PHP4 .

Функция __construct () является конструктором в стиле PHP5 .

Вы должны использовать последнее, потому что первое устарело и может быть удалено из языка.

Кроме того, первые могут или не могут игнорировать различные концепции OO PHP5, такие как операторы публичной / приватной видимости. Не то чтобы вы хотели сделать конструктор частным, если бы вы не использовали шаблоны Singleton или Factory.

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