Mikor melyiket kell használni osztályok létrehozásánál PHP-ban?
Nemrég kezdtem el tanulni a PHP-t és eddig azt vettem észre az osztályoknál, hogy többféleképpen is átlehet neki adni az adatokat.
Egyik mikor közvetlen a constructornak adom meg:
new User("John", 27);
Másik mikor az osztály létrehozása után közvetlen a változóknak:
$user = new User();
$user->name = "John";
$user->age = 27;
$user->save();
És setterekkel:
$user = new User();
$user->setName("John");
$user->setAge(27);
$user->save();
Ezek közül mikor melyiket kell használni?
Vagy teljesen mindegy?
Pl. ha van egy osztály aminek kötelezően megkell adni 4-5 adatot akkor azokat általában a constructorba kell megadni vagy az is jó ha a save() funkció előtt ellenőrzöm, hogy nem-e nullos értékekkel vannak a kötelező változók?
OOP elvek alapján:
konstruktornak adod azokat a paramétereket, amik megvannak a létrehozás pillanatában, és nem fog változni nagyon (vagy csak később fog változni)
Második opciód, közvetlenül a paramétert adod meg: ilyet nem csinálunk, mondhatni erősen nem ajánlott/tilos, tegyél minden paramétert priváttá, különben összecse...k neked.
Setterek: ha változó paramétered van, akkor írsz egy settert, és azt használod a publikus paramétered helyett. Ha normálisan írod meg őket, akkor nem kell save metódus (esetleg db adatoknál jól jöhet, de veszélyes úgy írni, mert ha elfelejted odaírni, elvész az adat, így inkább célszerű a setterben meghívni a "commit" függvényt)
Én ezt a save() funkciót nem igazán értem, hiszen már előtte átállítod az értékeket, minek kell még "rámenteni" is? Ha valami adatbázisba írás akar ez lenni, akkor nem szóltam, de a névválasztás ekkor sem valami jó, mert nem beszédes.
A változók közvetlen manipulálása nem ajánlott, másrészt általában ezek privát adattagok, szóval nem is tudod így. Használj setter-t, getter-t.
"azt vettem észre az osztályoknál, hogy többféleképpen is átlehet neki adni az adatokat."
Mint bármelyik más programnyelvben is. :)
"Ha valami adatbázisba írás akar ez lenni, akkor nem szóltam"
Az. pl ORM. :)
"de a névválasztás ekkor sem valami jó, mert nem beszédes."
A yii, a laravel, meg szerintem még van pár keretrendszer ami szintén ezt az elnevezést használja. Amúgy beszédes: mármint ugye ez ORM-nél van csak, tehát ha létrehozol egy új objektumot akkor létrehozza, ha find-al egy meglévő record adataival hozol létre egy példányt a modelből akkor pedig frissíti (update). Tehát minden esetben "mented" a változást, csak ha új adat akkor insert, ha régi akkor update lesz.
Természetesen controllerben (CRUD) esetén (pl laravelben) store és update elnevezést használ ami beszédes (ha erre gondoltál).
és a többieket megerősítve:
használj gettert/settert. több előnye is van, pl megadhatod hogy milyen típusú változót fogadsz el paraméterként és (ha normális IDE-t használsz) akkor már fejlesztés közben szól, ha nem azt akarod átadni (de legkésőbb futás közben az interpreter akkor is rinyálni fog érte) szóval sok kellemetlenségtől tud megkímélni.
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!