![]() |
![]() |
![]()
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ł' ?> |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Właśnie dlatego jedyną dla mnie w pełni naturalną formą jest ustawianie atrybutów poprzez domyślną wartość parametru konstruktora Czyli na dobrą sprawę przenosisz jedynie sztywno zapisaną wartość domyślną z miejsca deklaracji właściwości w miejsce deklaracji argumentu dla konstruktora, tak? Przecież to nie zmienia kompletnie niczego. Klasa nadal wie jak obiekt może zostać skonstruowany (chociaż nie bardzo wiem co złego z tego faktu wynika). Dodatkowo możesz skończyć z paskudnym konstruktorem posiadającym powiedzmy trzy normalne, wymagane argumenty (ok) i jeszcze sześć opcjonalnych (niezbyt fajna sprawa).Na dobrą sprawę jedyne co wg mnie możesz przy takim podejściu zyskać to pozbycie się jakiś nadmiarowych przypisań wartości. Ale nie oszukujmy się... nie jest to nawet warte rozpatrzenia, bo wartości domyślne stosuje się tam gdzie: 1. Pokrywają one zdecydowaną większość przypadków użycia. 2. Są "lekkie". Raczej nie daje się jako domyślnych obiektów które potrzebują 10 MiB pamięci i 2 sekund na sam start. A w normalnym przypadku (gdy jest to powiedzmy przykładowo wartość logiczna) domyślne przypisanie wartości powiedzmy false tylko po to by zaraz potem czy to przez konstruktor czy jakiegoś settera zmienić tą wartość na true nie kosztuje nic. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 11:06 |