PHP OOP osztalynal mi kulonbseg a 2 dolog kozott?
SZoval van egy Teglalap osztalyunk, a es b oldallal. Ez a két értékbeállitásmód között mi a különbség? és melyiket kell használni??
1. : public $b;
2. : public function getB() {return $this->b;}
public function setB() { $this->b = b; }
Egymás nélkül, és együtt is működnek..Ugyanúgy kiirja ha , $teglalap->b; vagy $teglalap->getB();
PHP-ban működik, ráadásul az alap láthatóság is public, szóval valóban elhagyható az 1. pontban említett rész.
Ugyanakkor nem túl szép megoldás.
"a legtöbb nyelv engedi"
Ezt nem mondanám. Ez csak a gyengén típusos scriptnyelvekre jellemző dolog.
én erről beszéltem: "Ugyanúgy kiirja ha , $teglalap->b; vagy $teglalap->getB();"
Nem vagyok egy php guru, de php-ben tényleg működik az, hogy "public function getB() {return $this->b;} ", ha b nevű változóról korábban egy büdös szó sem volt? mert az egy dolog, hogy nem kell deklarálni, de azért csak kell, hogy létezzen a változó, mielőtt megpróbáljuk visszaadni, nem?
Szoval akkor a 2.-at celszerubb hasznalni
Egyebkent:
"Igen, de a kérdésben pont arról volt szó, hogy az 1. pontban szereplő deklarációt elhagyva is működik a kód, ami a java, C++, C# stb.. esetén hibát eredményez."
c#-ban az 1. deklaraciot lehagyva is mukodik! 2. nelkul nem mukodik! de php-ban a 2. nelkul is mukodott, szoval azert nem ertettem mire jo a 2. akkor :/
> de php-ban a 2. nelkul is mukodott, szoval azert nem ertettem mire jo a 2. akkor :/
Kicsit tegyük félre, hogy a te megoldásod egy kicsit hibás. a setB() metódusnak nincs paramétere. Akkor például ha van egy objektumod, ami a folyószámládat valósítja meg. Oké, van annak egy tulajdonsága, a folyószámlán található összeg. A kétféle megvalósítás akkor így néz ki:
class folyoszamla {
public $egyenleg
}
A másik:
class folyoszamla {
private $egyenleg;
public function getEgyenleg() { return $this->egyenleg; }
public function setEgyenleg($v) { $this->egyenleg=$v; }
}
Nagyszerű. Megírod az első formában, mert az úgy neked rövidebbnek tűnik. A kódodban aztán több száz helyen használod is, hogy $szamlam->egyenleg = …. Működik? Igen. Mindenki boldog és vidám, egészen addig, amíg valaki szól fentről, hogy visszaélések történtek a folyószámlákkal, kellene naplózni, hogy melyik folyószámla esetén milyen összegre változott az egyenleg. Na ekkor mondasz fel, mert végig kellene bogarászni a kódodat, hogy hol változtattál az egyenlegen, és vagy ott helyben naplózni, vagy szépen átírni a második megolásra az objektumot. Mert mi a helyzet a második megoldásnál? Azt mondod, hogy semmi gond, átírod az objektumodat:
public function setEgyenleg($v) {
naplozas("Valaki megváltoztatta az egyenleget ".$this->egyenleg." Ft-ról ".$v." Ft-ra.");
$this->egyenleg=$v;
}
Vagy amúgy használhatod a __set és __get metódusokat is, mérlegelve, hogy ettől mennyire válik átláthatatlanabbá, vagy éppen egyszerűbbé a kód.
Az OOP szemléletben nem adatokat kezelünk, hanem objektumokat. Hogy milyen műveletek kellenek az egyenleg megváltoztatásához, azt bízzuk rá az objektumunkra. Hogy ez most csak egy tulajdonság megváltoztatása, vagy valami bonyolultabb művelet is kell hozzá, az legyen az objektum belügye, ne akard ez előre mérlegelni, mert nem biztos, hogy az adott helyzet áll fenn a fejlesztés későbbi időszakában is.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!