Jump to content
php.lv forumi

Tieša piekļūšana pie mainīgajiem un konstruktors...


ntw

Recommended Posts

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 by ntw
Link to comment
Share on other sites

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

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

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

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

×
×
  • Create New...