Ahoj mám pár dotazů k oop
1) tím že deklaruji vlastnost ve třídě s private ,tak jsem tím vytvořil zapouzdření???
2) měl jsem zato že zapouzdření je k tomu aby se nikdo z venku nedozvěděl co mám uvnitř třídy a pak jsem
zjistil že pokud přistupuji k vlastnostem třídy přes setry nebo getry, tak ty vlastnosti beze studu změním .
Není to tak trochu porušení základního principu zapouzdření.
Prý je to dobré ve větších projektech , kde se později dá vše potřebné snadno změnit bez větší námahy.
3) Pro otázku č.2 je prý řešením COLLECTION . Bohužel jsem nikde nevygooglil moc článků
které by mi kolekce nějak blíže vysvětlily. Takto chápu kolekce já. V kolekcích se deklaruje nekolik instanci s různými parametry, já si vyberu jen jednu instanci kterou zrovna potřebuji poté deklaruji vlastnost jako pole a do něj se
vloží použitá instance do indexu, při dalším použití nějaké instance se zjistí pomocí klíče jestli už náhodou daná instance nebyla použita a popřípadě to vyhodí chybu nebo něco jiného. Nevím jestli to chápu dobře
pokud jste někdo znalý mohli byste mi to trochu víc osvětlit.
4) konstruktor se inicializuje hned při dotazu z instance objektu , to znamená že při zaslání dotazu do třídy se ihned nastaví třídní vlastnosti podle zaslaných parametrů od objektu, moje otázka je jestli jsem to pochopil správně
5) měl bych přes konstruktor nastavovat jen vlastnosti public nebo je nějaké pravidlo pro nastavování hodnot vlastností.
6) kdy mám používat konstruktor a kdy ne. Někdo tvrdí že bych měl konstruktor použít vždy a v knize php6
programujeme profesionálně zase píší že bych ho měl požít jen když je to třeba.
// otázka č1
<?php
class Demo{
private $_name; // je tato vlastnost zapouzdřená?
}
?>
// otazka č 2
class Demo{
private $_name; // zapoudřená vlastnost
public function getName(){ // nastavení přístupu
return $this->_name;
}
public function sayHello(){ // metoda pro vypsání
print "ahoj ".$this->getName()."!";
}
public function setName($name){ // metoda pro nastaveni hodnoty
if(!is_string($name) or strlen($name) == 0){
echo "spatný parametr pro nastaveni";
}
$this->_name = $name;
}
}
// zpráva od objektu
$objDemo = new Demo(); // instance
$objDemo->setName ('Karle'); // pozadavek pro nasteveni hodnoty
$objDemo->sayHello(); // vypsani hodnoty
// otazka č5. je lepsi nastavovat pres konstruktor jen public vlastnosti
class Log
{
public $soubor;
function __construct($soubor)
{
$this->soubor = $soubor;
}
function loguj() { ... }
}
$log = new Log("hodnota");
...
...
...
Předem děkuji za rady