objektum tulajdonságának elérése másik objektumból
Sziasztok!
A kérdésem az, hogy hogyan lehet elérni egy class-ból egy másik objektum egy értékét ?
van egy ilyenem:
$site=new site();
$site->initialization($action);
$menu=new menu();
majd
class menu {
function akarmi() {
echo $site->valamely_erteke;
}
}
amikor a menu-n belül var_dump-olom a $site objektumot, NULL -t kapok vissza, gondolom ez normális is.
a kérdésem tehát az, hogy létre kell hoznom a menu objektumon belül újra a $site objektumot, vagy elkerülhető ez valahogy ?
■ A kérdésem az, hogy hogyan lehet elérni egy class-ból egy másik objektum egy értékét ?
van egy ilyenem:
$site=new site();
$site->initialization($action);
$menu=new menu();
majd
class menu {
function akarmi() {
echo $site->valamely_erteke;
}
}
amikor a menu-n belül var_dump-olom a $site objektumot, NULL -t kapok vissza, gondolom ez normális is.
a kérdésem tehát az, hogy létre kell hoznom a menu objektumon belül újra a $site objektumot, vagy elkerülhető ez valahogy ?
::
erre gondolsz?
nem teljesen
azt meg tudom csinálni, hogy írok egy függvényt, hogy
$menu=new menu;
$menu->set_value("valtozonev",$site->ezkene);
de ez így nem hatékony, mert ugye ha van tenmillion változóm, akkor...
van ez a $site=new site; objektumom, itt tárolok el egy halom információt az oldalról, ez minden php -ban lefut.
aztán van egy különleges esetem, amikor másféle menüt kell használnom, mint eredetileg.
erre találtam ki a $menu=new menu; objektumot.
azaz, nem szeretném már példányosítani mégegyszer a site-ot, hiszen az már egyszer megvan.
csak szeretném a menü objektumban egy tulajdonságát használni, de nem tudom, hogyan érhetném el.
$GLOBALS?
szuper
Class vs Globals
???
OOP szemlélet
Ez világos, de
Static...
Instance vs Object
- létrejött egy példány a "site" osztályból,
- és van egy "menu" példányunk is, ami
- a létrehozott "site" példány egy propertyjét írja ki
- az "akarmi" metódusban.
A "Menu::valami()" tényleg ugyanezt csinálná?
Megoldható...
Ha procedurális filozófiával próbálsz OOP-t tervezni nyilván nem fogod tudni megvalósítani a dolgokat. Ez kb olyan, mint ha autóvezetés után fölülnél a vonatra és amiatt panaszkodnál hogy nem tudsz vele most gyorsan jobbra elkanyarodni...
Re:Instance vs. Object
Az első válaszod bizonnyal igen lesz, hiszen nyílván így kapcsolsz adatokat hozzájuk, amit csak egy konstruktorral tehetsz meg, gondolnád te,
DE!
A static pont ennek elkerülésére szolgál. A staticcal létrehozott változók, függvények létrejönnek a programkód futásakor, így bármikor elérhetőek, nem kell hozzá példányosítanod az osztályod!
[Függvények esetében ez nyilván csak a szebb-logikusabb programozást segíti. Sajnos PHP-ban nem sokat kell/nem sokat törődnek az oszálytagok/függények láthatóságával(public protected, private).]
Fentebb szóba kerültek a konstansok. A static felfogásban kicsit hasonlít a konstansokhoz, de PHP-ban a konstansok nem tartalmazhatnak kiértékelő kifejezéseket(logikus is, hiszen a konstanst a fordító automatikusan behelyezi a programkódba), helyettük vannak a static kulccsal generált változók. Amelyeket Bármikor megváltoztathaszt a programkód futásakor.
a végére egy kis példakód magyarázat:
PHP és gányolás
A PHP világában sok más érdekesség is megfigyelhető.
http://www.php.net/source.php?url=/index.php#pagefooter
Idézek az oldal forráskódjából:
If you're reading this, it isn't because you've found a security hole.
this is an open source website. read and learn!
*/
OOP szemlélet
Az egységbezárás az objektum belső szerkezetére vonatkozik. Adat és viselkedés egységére. Egy statikus metódus valójában függvény, amit egy osztály burkol.
hogyan
Tudnál nekem ide írni egy példát, az én gondomra ?
Fentebb
Singleton
PHP4 vagy PHP5?
Illetve PHP5 esetén érdemes még a statikusan használt függvényt statikusnak definiálni, meg csinálni egy private konstruktort.
Üdv,
Felhő
4-es akart lenni :)
PHP 4
Tudom
5-6