« 1 2 »
Autor Zpráva
Jack Finger
Profil
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
Jack Finger
http://diskuse.jakpsatweb.cz/index.php?action=vthread&topic=66900&foru m=9&page=-1
Jack Finger
Profil
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
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
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
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
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
Jack Finger
rika ti neco singleton? tu prvni tridu by slo udelat jako statickou instanci...
Jack Finger
Profil
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
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
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
suky
ne, to mi nepomůže, to dosazuje do instance, ale já tu hodnotu potřebuju dostat přímo dovnitř třídy.
suky
Profil
$prom = "cau";
define(KONSTANTA,$prom);
echo KONSTANTA;
Jack Finger
Profil
suky
ad define) nn, to umím, já potřebuju "exe-ovat" ten $string.
suky
Profil
Jack Finger
no print nebo echo...
suky
Profil
Jack Finger
a ta konstanta se pise bez uvozovek a apostrofu...
Jack Finger
Profil
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
tak define už jsem vyřešil: constant($string);
teď ještě ta třída. neví někdo?
suky
Profil
$prom = "cau";
define(KONSTANTA,$prom);
$string = KONSTANTA;
echo $string;
Mastodont
Profil
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
Jack Finger
Proc sito delas s tim define tak slozity? Vzdyt staci nepouzivat apostrofy...
Jack Finger
Profil
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
Jack Finger
Pridal jsem si te na ICQ, kvuli pripadne konzultaci, protoze vidim, ze sme v podobnym stadiu...
Mastodont
Profil
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
Mastodont
Jenze z jeho problemu, kterej je popsanej v nadpise se nakonec vyklubal jinej problem...
Mastodont
Profil
No jo, sorry. Slavíme narozeniny, hladina alkoholu stoupá, přechody z jednoho problému na jiný unikají :-)))
Jack Finger
Profil
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
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
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
Mastodont
str_replace taky, jen místo file_get_contents používám fgets, ale nevyjde to nastejno?
« 1 2 »

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: