Autor | Zpráva | ||
---|---|---|---|
Jack Finger Profil |
#1 · Zasláno: 6. 2. 2008, 19:05:28
Ahoj,
jsem v OOP začátečník, tak bych se chtěl poradit, jak dostat obsah proměnné zvenku třídy dovnitř jiné třídy. Příklad: class My2 { public $to_change = ''; } $my2 = new My2; $my2->to_change = 'do další třídy'; teď když ať dám jakýkoliv případ, hází to prázdný řetezec: class My1 extends My2 { echo $this->to_change; } class My1 { $my2 = new My2; echo $my2->to_change; } jak tedy na to? hledat jsem zkoušel, ale nic nenašel. díky, Jack F. |
||
suky Profil |
#2 · Zasláno: 6. 2. 2008, 19:16:55
|
||
Jack Finger Profil |
#3 · Zasláno: 6. 2. 2008, 19:21:36
suky
ano, již jsem četl, ale tam není řešení, jak tu proměnnou nakonec dostat do jiné třídy (nebo jsem to řešení přehlédl)..? |
||
suky Profil |
#4 · Zasláno: 6. 2. 2008, 19:22:58
Jack Finger
V podstate jsem se obecne dozvedel 3 reseni, jedno, ktere nedoporucuji je pres $GLOBALS dalsi pres konstantu define() a treti dostat ji do konkretni instance... |
||
Jack Finger Profil |
#5 · Zasláno: 6. 2. 2008, 19:27:03
suky
$_GLOBALS mi taky nepřijde zrovna best, define() se chci vyvarovat. a do instance - to jak? vím, že se ptám jako začátečník, ale v OOP jím opravdu jsem :oP |
||
suky Profil |
#6 · Zasláno: 6. 2. 2008, 19:33:44
Jack Finger
Koukam, ze amme stejny problem objednal jsem si knizku a ted mam objednany dalsi dve ;) Jinak s vetsima problemama za BetaCamem ;) class Trida { public $prom; public function __construct($input) { $this -> prom = $input; } } $promenna = "neco" $obj = new Trida($promenna); //nebo class Trida { public $prom; } $promenna = "neco" $obj = new Trida; $obj -> prom = $promenna; |
||
Jack Finger Profil |
#7 · Zasláno: 6. 2. 2008, 19:41:51 · Upravil/a: Jack Finger
suky
buď jsem to stále nepochopil, nebo nevím. Já potřebuju v první třídě vytvořit proměnnou s prázdnou hodnotou, pak zavolat instanci první třídy, přes tu instanci přiřadit proměnné hodnotu, potom vytvořit druhou třídu, do které potřebuju dostat hodnotu proměnné z první třídy. konkrétně: class Language { public $image_dir = ''; } $lang = new Language; $lang->image_dir = 'images/'; class Temp { function funca(){ echo ...; // zde potřebuji vypsat: images/ } } //zde samozřejmě volám fci z druhé třídy $temp = new Temp; $temp->funca(); |
||
suky Profil |
#8 · Zasláno: 6. 2. 2008, 19:48:01
Jack Finger
rika ti neco singleton? tu prvni tridu by slo udelat jako statickou instanci... |
||
Jack Finger Profil |
#9 · Zasláno: 6. 2. 2008, 19:55:59
suky
ne, singleton mi nic neříká. našel jsem tohle http://php.interval.cz/clanky/vzor-singleton/ a vůbec mě nenapadá, jak to řeší můj problém :oP |
||
suky Profil |
#10 · Zasláno: 6. 2. 2008, 19:58:00
Jednodussi reseni, ale myslim, ze ti asi nepomuze...
class Trida1 { public $prom = ""; } class Trida2 { public $prom = ""; } $obj1 = new Trida1; $obj1 -> prom = "neco"; $obj2 = new Trida2; $obj2 -> prom = $obj1 -> prom; |
||
Jack Finger Profil |
#11 · Zasláno: 6. 2. 2008, 19:58:34
a ještě OT, asi triviální:
define('AHOJ','čau!'); $string = 'AHOJ'; ???($string); jakou funkci mám použít, aby mi to vrátilo 'čau!'? dík. |
||
Jack Finger Profil |
#12 · Zasláno: 6. 2. 2008, 19:59:40
suky
ne, to mi nepomůže, to dosazuje do instance, ale já tu hodnotu potřebuju dostat přímo dovnitř třídy. |
||
suky Profil |
#13 · Zasláno: 6. 2. 2008, 20:00:17
$prom = "cau"; define(KONSTANTA,$prom); echo KONSTANTA; |
||
Jack Finger Profil |
#14 · Zasláno: 6. 2. 2008, 20:01:43
suky
ad define) nn, to umím, já potřebuju "exe-ovat" ten $string. |
||
suky Profil |
#15 · Zasláno: 6. 2. 2008, 20:02:56
Jack Finger
no print nebo echo... |
||
suky Profil |
#16 · Zasláno: 6. 2. 2008, 20:03:28
Jack Finger
a ta konstanta se pise bez uvozovek a apostrofu... |
||
Jack Finger Profil |
#17 · Zasláno: 6. 2. 2008, 20:05:05
suky
když napíšu: echo $string; vypíše mi to 'AHOJ', ale já potřebuju "echoinout" to AHOJ, aby mi z toho vylezlo 'čau', ty definy můžou být dynamicky. |
||
Jack Finger Profil |
#18 · Zasláno: 6. 2. 2008, 20:07:03
tak define už jsem vyřešil: constant($string);
teď ještě ta třída. neví někdo? |
||
suky Profil |
#19 · Zasláno: 6. 2. 2008, 20:07:19
$prom = "cau"; define(KONSTANTA,$prom); $string = KONSTANTA; echo $string; |
||
Mastodont Profil |
#20 · Zasláno: 6. 2. 2008, 20:07:52
potřebuju v první třídě vytvořit proměnnou s prázdnou hodnotou, pak zavolat instanci první třídy, přes tu instanci přiřadit proměnné hodnotu, potom vytvořit druhou třídu, do které potřebuju dostat hodnotu proměnné z první třídy
To má být cvičení nebo jen blbneš? |
||
suky Profil |
#21 · Zasláno: 6. 2. 2008, 20:08:56
Jack Finger
Proc sito delas s tim define tak slozity? Vzdyt staci nepouzivat apostrofy... |
||
Jack Finger Profil |
#22 · Zasláno: 6. 2. 2008, 20:26:55
To má být cvičení nebo jen blbneš?
To se snažím o sestavení jazykových verzí a výběrem témat. Jestli mi ale někdo chce doporučit Smarty - ano, já o něm vím, ale pak bych se připravil o lekci OOP v PHP. Prostě si to chci udělat sám, po svým, a časem prostě přijdu na tom, že to jde líp i jinak, nebo mi to někdo doporučí, ale rozhodně nechci jen používat skripty jiných ;o) každopádně jsem to vyřešil tím define(); Proc sito delas s tim define tak slozity? zvyk ;o) asi mi to přijde i čistší :o) |
||
suky Profil |
#23 · Zasláno: 6. 2. 2008, 20:34:46
Jack Finger
Pridal jsem si te na ICQ, kvuli pripadne konzultaci, protoze vidim, ze sme v podobnym stadiu... |
||
Mastodont Profil |
#24 · Zasláno: 6. 2. 2008, 20:51:27 · Upravil/a: Mastodont
Jack Finger
Smarty ti rozhodně doporučovat nebudu, to je kolos. Define ovšem určitě neřeší tvůj původní problém jak dostat obsah proměnné zvenku třídy dovnitř jiné třídy, protože tento příkaz vytváří konstantu, nikoli proměnnou ... Hodně se doporučuje předávání v konstruktoru a pokud jde o izolovanou proměnnou, tak je to asi nejlepší způsob. |
||
suky Profil |
#25 · Zasláno: 6. 2. 2008, 20:52:58
Mastodont
Jenze z jeho problemu, kterej je popsanej v nadpise se nakonec vyklubal jinej problem... |
||
Mastodont Profil |
#26 · Zasláno: 6. 2. 2008, 20:56:34
No jo, sorry. Slavíme narozeniny, hladina alkoholu stoupá, přechody z jednoho problému na jiný unikají :-)))
|
||
Jack Finger Profil |
#27 · Zasláno: 6. 2. 2008, 21:15:41
Mastodont,suky
define mi pomohlo, procházím totiž soubor .tpl pomocí fgets a cyklu while, hledám dané řetězce a pak měním buď za obsah proměnných, nebo obsah konstant, záleží na tom, kde je to definované. když jde o statický text (např titulek) ve tříde Language, tak přes proměnnou, když někde v index.php, tak přes konstantu. funguje to ;o) |
||
Jack Finger Profil |
#28 · Zasláno: 6. 2. 2008, 21:19:15
a ještě jedna věc :oP
je v PHP už defaultně aktuální čas vypsatelnej jinak přes nějakou fci? třeba že by byl v konstantě, nebo proměnné, jako např název souboru - __FILE__ |
||
Mastodont Profil |
#29 · Zasláno: 6. 2. 2008, 21:29:04
procházím totiž soubor .tpl pomocí fgets a cyklu while, hledám dané řetězce a pak měním buď za obsah proměnných
Tak to já dělám taky, akorát používám file_get_contents a str_replace. |
||
Jack Finger Profil |
#30 · Zasláno: 6. 2. 2008, 21:30:16
Mastodont
str_replace taky, jen místo file_get_contents používám fgets, ale nevyjde to nastejno? |
||
Téma pokračuje na další straně.
|
0