Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]OOP Ucze się... konstruktor
cykcykacz
post
Post #1





Grupa: Zarejestrowani
Postów: 550
Pomógł: 9
Dołączył: 29.05.2009
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Witam,
nie umiem ogarnąć konstruktora kiedy go używamy i po co?
Może ktoś mi wytłumaczy?
W poniższym przykładzie mamy klasę dog w której mamy publiczny dostęp do atrybutu $name oraz konstruktora.
Z tego co rozumiem konstruktor jest to metoda która w chwili powstania obiektu nadaje mu jakiś właściwości?
Ale po co i kiedy tego mam używać?
klasa
Kod
<?php
class Dog{
    public $name;//atrybut przechowujący imię psa

    /*konstruktor*/
    public function __construct($name){
        $this->name = $name;
    }
    public function roar(){
        echo 'chał chał';
    }
    //ciach
}
?>

obiekt
Kod
<?php
require('class.dog.php');
$reksio = new Dog('Reksio');
echo $reksio->name; //atrybut "name" publiczny, więc wyświetlone zostanie 'Reksio'
$reksio->roar(); //metoda roar() publiczna, więc wyświetlone zostanie 'chał chał'
?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Może wyjaśnię o co mi chodzi, bo everth "widzi" o co mi biega (IMG:style_emoticons/default/smile.gif) Klasa to tak naprawdę jedynie szablon, na podstawie którego buduje się obiekty, a więc nie powinna o nich w sumie nic, lub naprawdę niewiele wiedzieć. To pieczątka, która wali nieskończoną (no chyba że to singleton (IMG:style_emoticons/default/wink.gif) ) ich ilość od matrycy. Tymczasem obiekty mogą być różnie inicjowane właśnie konstruktorem i to on powinien ustawiać wedle swoich możliwości właściwości obiektu, a nie klasa. Weźmy klasę Samochód... Czy jest dla nas istotne czy jest on 3-, 4-, 5-drzwiowy w momencie deklaracji? Nie! To staje sie istotne dopiero gdy obiekt ma zostać utworzony. I to samo tyczy innych własności klasy. My mamy być tylko świadomi ich istnienia, ale dopiero podczas tworzenia obiektu powinno nastąpić przypisanie im wartości. Do tego czasu może tam być cokolwiek. Klasa nie powinna nawet typów prostych im przypisywać. To zadanie konstruktora i nie powinno się go w tym wyręczać. Jeśli byłoby takie działanie pożądane, to coś takiego jak konstruktor by nie powstało. Bo jaki ma sens ta metoda, skoro i tak można by było zainicjalizować klasę wartościami. Konstruktor stał by się zbędny. De facto konstruktor i destruktor to pozostałości OOP z C++. Tam ich sens jest o wiele ważniejszy gdy następuje dynamiczne przydzielanie pamięci chociażby. Ogólnie ich użycie w środowisku web jest mocno ograniczone funkcjonalnie z racji bezstanowości, ale w aplikacji desktopowej ich użycie daje kilka fajnych możliwości w czasie rzeczywistym. W sieci, w której żądania są z natury rzeczy krótkie, "zabawa" z konstruktorami została mocno ograniczona. A szkoda, bo już same przeciążanie konstruktorów to fajna rzecz.

EDIT: Byłbym zapomniał... Osobiście czasem naginam to i mam jeden, jedyny wyjątek od tej reguły: stała i niezmienna wartość mająca być widoczna dla wszystkich obiektów danej klasy. Coś widocznego tylko dla tejże klasy i zazwyczaj też staram się tę zmienną zabezpieczyć przed przypadkowym nadpisaniem stosując const (IMG:style_emoticons/default/smile.gif) To jedyny wyjątek, kiedy przewiduję, że można nadać wartość własności klasy już na etapie jej definicji.
Go to the top of the page
+Quote Post

Posty w temacie
- cykcykacz   [PHP]OOP Ucze się... konstruktor   20.04.2011, 18:44:30
- - mat-bi   Ludzie... http://museum.webcity.pl/webcity/artyku...   20.04.2011, 19:13:59
- - cykcykacz   Już miej więcej się domyśliłem, że konstruktora uż...   20.04.2011, 19:39:27
- - thek   Ech... Konstruktor to SPECJALNA metoda, która ZAWS...   20.04.2011, 20:07:51
- - Crozin   @thek: A to niby czemu coś takiego miałoby być błę...   20.04.2011, 20:47:55
- - cykcykacz   Odbiegając od tematu ciężko się nauczyć mi osobiśc...   20.04.2011, 21:23:32
- - everth   @Crozin - błąd nie ale thek ma trochę racji, w pod...   20.04.2011, 22:07:21
- - thek   Może wyjaśnię o co mi chodzi, bo everth "widz...   21.04.2011, 09:43:35
- - Crozin   @thek: jak zwykle nie zawiódł. Ładny wywód i trzyk...   21.04.2011, 10:15:43
- - cykcykacz   Stworzyłem klasę, która łączy się z bazą oraz pobi...   21.04.2011, 19:13:02
- - mat-bi   W konstruktorze nie robimy zwykle takich rzeczy ja...   21.04.2011, 19:20:02
- - thek   Spróbuj w C/C++ tak zrobić, to kompilator Ci się n...   21.04.2011, 21:55:17
- - everth   Tak mnie naszło - czy PHP w trakcie inicjowania ob...   21.04.2011, 22:15:33
- - Crozin   @thek: A jakiś argument przeciw, ale nie bazujący ...   21.04.2011, 22:49:35
- - thek   Czy ja wiem czy takie nie domyślne? Mam klasę w Ko...   22.04.2011, 01:44:36
- - Crozin   Temat wiąże się z OOP więc proszę mi tutaj Kohany ...   22.04.2011, 10:52:30
- - thek   No nie mów, że Kohana to nie OOP? Ja rozumiem, że...   22.04.2011, 11:47:46
- - Crozin   Ale przecież oczywistym jest, że jeżeli ustalenie ...   22.04.2011, 12:38:25
- - thek   Cytatjeżeli ustalenie czegoś nie jest tak trywialn...   22.04.2011, 17:08:53
- - Crozin   Ależ Ty mącisz... Wymieszałeś prywatne sprawy obi...   22.04.2011, 17:33:02
- - thek   Ależ nie mieszam... Zauważ co uznaję za prawidłowe...   22.04.2011, 21:29:47
- - everth   [bezzwiazkuztematem] Nie wiem czy zauważyliście al...   22.04.2011, 22:11:42
- - Crozin   CytatWłaśnie dlatego jedyną dla mnie w pełni natur...   23.04.2011, 14:15:45
- - thek   Jak najbardziej masz rację Crozin. To nie zmienia ...   24.04.2011, 21:54:31
- - everth   @thek trochę masz dziwne podejście z tymi argument...   25.04.2011, 12:40:58
- - darko   ~cykcykacz kontynuujesz temat po prawie dwóch lata...   25.04.2011, 13:39:18
- - cykcykacz   ~darko faktycznie masz mnie nawet zapomniałem o t...   25.04.2011, 16:20:24
- - r4xz   no na pewno aby przyśpieszyć naukę przyda się prze...   25.04.2011, 16:39:49
- - darko   ~cykcykacz jeśli chodzi o wymagania pracodawców na...   25.04.2011, 18:08:35
- - cykcykacz   ~darko CytatMoże to, co dalej napiszę nie będzie ...   25.04.2011, 19:58:03
- - darko   Php uczyłem się 4 miesiące znając już języki: c, c...   25.04.2011, 20:13:44
- - cykcykacz   To ja dalej zasiadam do nauki PHP i nie tylko Dz...   25.04.2011, 20:28:23
- - Crozin   @thek: Uczepiłeś się jednego konkretnego przypadku...   25.04.2011, 20:57:49
- - darko   ~Crozin zgadza się, że przestrzeń globalna jest zł...   25.04.2011, 21:19:02
- - everth   Paradygmat pewnie żaden, ale czy kosmetyka? Jeśli ...   25.04.2011, 22:59:13
- - thek   @Crozin: Nie wiem czy zauważyłeś, ale to o czym ja...   26.04.2011, 02:23:29
- - Crozin   @darko: Nie wiem z jakich Ty to FW korzystasz, ale...   26.04.2011, 12:26:48
- - thek   Widać sam nie zauważyłem, że w czasie pisania skró...   26.04.2011, 12:40:37
- - everth   @thek Ciekawy art na temat umieszczania argumentów...   26.04.2011, 18:31:27
- - darko   Cytat(Crozin @ 26.04.2011, 13:26:48 )...   26.04.2011, 19:14:10
- - thek   @everth: faktycznie fajny, ale szkoda, że na wąski...   26.04.2011, 21:14:27


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 19:20