ntw Posted January 11, 2009 Report Share Posted January 11, 2009 (edited) Nu esmu apguvis OOP Pamatus... Tikai moka jautājums par piekļuvi mainīgajiem un konstruktoriem. Lasiju, ka iekš OOP nav vēlams piekļūt mainīgajiem tieši. Tātad nedarīt laikam tā: $kaķa_kastīte = new kaste; $kaķa_kastīte->galvenais_kaķis; $kaķa_kastīte->kastes_tīrītājs; kur (primitīvā variantā) var $galvenais_kaķis = "Bumbulītis"; var $kastes_tīrītājs = "Žurka"; Bet tā vietā rakstīt konstruktoru ? Kāpēc tas būtu jādara un kā tur galu galā ir ? Apskaidrojiet iesācējam pieri :) Edited January 11, 2009 by ntw Link to comment Share on other sites More sharing options...
bubu Posted January 11, 2009 Report Share Posted January 11, 2009 Konstruktoru tu šajā gadījumā vari izmantot tikai tad, ja tev vajag uzstādīt mainīgo vērtības (inicializēt tos). Ja tev vajadzēs nolasīt mainīgo vērtības, tad nekas cits kā vai nu atļaut lasīt mainīgos, vai arī taisīt getteru metodes neatliks. A konstruktoram mainīgos padod tāpat kā parastai funkcijai: class kaste { public function __construct($a, $b) { $this->galvenais_kaķis = $a; $this->kastes_tīrītājs = $b; } } $kaķa_kastīte = new kaste("Bumbulītis", "Žurka"); Link to comment Share on other sites More sharing options...
marcis Posted January 11, 2009 Report Share Posted January 11, 2009 Par klases konstruktīvo nostrādās arī funkcija, kuras nosaukums būs tāds pats kā klases nosaukums. Bet principā vari definēt klases mainīgos arī bez funkcijas. $kaķa_kastīte = new kaste; $kaķa_kastīte->galvenais_kaķis="Bumbulītis"; $kaķa_kastīte->kastes_tīrītājs="Žurka"; Šajā gadījumā gan mainīgos iepriekš vajadzētu definēt klasē. Link to comment Share on other sites More sharing options...
Ghenis Posted January 11, 2009 Report Share Posted January 11, 2009 Principā mainīgos publiskus var atstāt tad, ja viņu patvaļīga mainīšana nevar negatīvi ietekmēt datu loģiku . Savādāk izmantojam getterus, setterus. Konstruktorā padodam defaultās vērtības. Labais stils ir darīt šādi class aaa { private $db; public function __construct($db = null){ if($db == null){ $this->db = db::getInstance(); } else { $this->db = $db; } } nevis class aaa { private $db; public function __construct(){ $this->db = $db; } } Link to comment Share on other sites More sharing options...
fest Posted January 11, 2009 Report Share Posted January 11, 2009 Par klases konstruktīvo nostrādās arī funkcija, kuras nosaukums būs tāds pats kā klases nosaukums. Bet iekš PHP 5 tā ir tikai dēļ backward compability. Lai gan nav aizliegts kā konstruktoru izmantot klases nosaukumu, labais tonis skaitās __construct(). Link to comment Share on other sites More sharing options...
marcis Posted January 12, 2009 Report Share Posted January 12, 2009 Es jau nekur nepieminēju, ka manis piedāvātais risinājums būtu obligāti jālieto :) Link to comment Share on other sites More sharing options...
Recommended Posts