Читаю книгу Мэтта Зандрастры про шаблоны и объекты. Не получается понять, зачем нужна функция __construct().
В Интернете говорится - для инициализации. То есть для задания начальных значений.
Например:
class ShopProduct {
public $title = "Стандартный товар";
public $producerMainName = "Фамилия автора";
public $producerFirstName = "Имя автора";
public Sprice = 0;
function __construct( $title, $firstName, $mainName, $price ) {
$this->title = $title;
$this->producerFirstName = $firstName;
$this->producerMainName = $mainName;
$this->price = $price;
}
function getProducer() {
return "{$this->producerFirstName} "."{$this->producerMainName}";
}
}
Но зачем вообще нужна такая уродливая конструкция? - с тавтологиями типа $this->title = $title;
Если надо задать начальные значения, то пишем просто:
$product1 = new ShopProduct();
$product1->title = "Собачье сердце";
$product1->producerMainName = "Булгаков";
$product1->producerFirstName = "Михаил";
Sproduct1->price = 5.99;
print «Автор: {$product1->getProducer()}\п»;
Переменные же здесь - public. А если переменные не задали, то есть же значения по умолчанию, которые задавались при задании переменных.
Так ведь нет. Вместо этого повсеместно пишут вызов метода __construct(), когда создается объект с помощью оператора new.
$product1 = new ShopProduct( «Собачье сердце», «Михаил», «Булгаков», 5.99 )’;
print «Автор: {$product1->getProducer()}\п»;
В чем разница?
1. AlexLF - 12 Июня, 2012 - 13:45:45 - перейти к сообщению
2. Viper - 12 Июня, 2012 - 16:28:06 - перейти к сообщению
AlexLF а если у вас внутри класса методы используют глобальные переменные самого класса вы тоже будете писать за классом присвоение?
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- class Foo {
- protected $a = 'bar';
- public function __construct(){
- $this->a = 'baz';
- }
- public function someActions() {
- if ($this->a == 'baz') {
- return true;
- }
- }
- }
теперь на приведенном примере попробуйте провернуть ваш код с минимальными "потерями".
К тому же если множество методов используют одни и те же переменные то логичней их 1 раз объявить в классе.
PS! Это вы еще не столкнулись видимо с ситуацией когда в конструкторе класса нужно получать какие-то данные и выполнять методы для возвращения результата.
Тем более если нужно какой-то метод выполнять каждый раз при вызове класса, то без конструктора у вас одинаковый код увеличится в разы.
PS1! Поправьте если где-то ошибся.