Obsah fóra www.hojko.com
Game-Points
Hľadať  •  FAQ  •  IP  •  CS  •  Zoznam užívateľov  •  Karma  •  Závisláci  •  Registrácia
 Prihlásiť sa pre kontrolu súkromných správ  •  Prihlásenie





php5, include_once
Odoslať novú tému   Odpovedať na tému    Obsah fóra www.hojko.com -> Programovanie  
 Moje príspevky :: Zobraziť predchádzajúcu tému :: Zobraziť nasledujúcu tému  
Autor Správa
final
Light Star
Light Star


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 04.12.2005
Príspevky: 206
Bydlisko: Prievidza
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 07 Nov 2006, 23:49    Predmet: php5, include_once Odpovedať s citátom  

čafte..

mám jednu triedu, pre includovanie súborov (ktorá obsahuje debug, atď)..

sú 2 súbory..
v tom prvom includujem ten druhý súbor a následne ho zobrazujem..

problém spočíva v tom, že v tom prvom súbore ešte pred include vytváram zopár inštancií na triedy, ktoré chcem taktiež používať v tom druhom súbore..

momentalne to mám riešené cez type hinting, ale to mi príde dosť škaredé..

zádrhel je ten, že to čo sa includuje je obsahom len danej inštacie (resp. to includujem len cez :: ), nie scriptu..

nejaký nápad? thx
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
carnaby
Amateur
Amateur



Stav: Odhlásený
Založený: 23.08.2005
Príspevky: 24
Bydlisko: Martin
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 8:26    Predmet: Odpovedať s citátom  

asi je to tou rannou hodinou ale vobec som ta nepochopil Sad skus lepsie vysvetlit kde je problem.

avsak v php5 ak vytvaras triedy mozes na include napisat aj autoloader kde mozes vyhodnotit nazov triedy a podla toho includnut co potrebujes. Tento sposob je vsak evidentne pomalsi ako ked pouzijes include_once tam kde ho potrebujes
Kód:

<?php
function __autoload($class_name)
{
   require_once $class_name . '.php';
}

$obj  = new MyClass1();
$obj2 = new MyClass2();
?>



ak ti vsak nejaky inklud zapisuje hned nieco do vystupu (echo) a ty to nechces alebo by si to radzej mal v premennej tak sa to da cez ob_.....

Kód:

<?php
ob_start();

echo "Hello World";

$out = ob_get_clean();
$out = strtolower($out);

var_dump($out);
?>


a len na okraj hinting neni skareda vec Smile
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
gwixt
Addict
Addict


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 24.09.2005
Príspevky: 3408
Bydlisko: Trash-Can
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 9:36    Predmet: Odpovedať s citátom  

ehm .. tiez som si nie isty ci dobre chapem ale ...

ked tie premenne (instanice niecoho) "prvej" triedy spravis ako staticke ... nepojdu pouzit v ten "druhej"??
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
Nosferatu
Medium Expert
Medium Expert



Stav: Odhlásený
Založený: 24.05.2005
Príspevky: 129

Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 10:57    Predmet: Odpovedať s citátom  

..on myslí asi thak, že keď má súbor, v ktorom má vytvorené inštancie tried, za tým má includnutý súbor a v ňom chce používať objekty z toho súboru, ktorý includuje ten v ktorom chce používať tie objekty, či ich položky..
no neviem, ono to nejde, aby includnutý súbor používal triedy a objekty ktoré sú v súbore ktorý ho includuje? Surprised .. možno som len zle pochopil.. to to ráno Confused
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
gwixt
Addict
Addict


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 24.09.2005
Príspevky: 3408
Bydlisko: Trash-Can
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 11:25    Predmet: Odpovedať s citátom  

Nosferatu napísal:
..on myslí asi thak, že keď má súbor, v ktorom má vytvorené inštancie tried, za tým má includnutý súbor a v ňom chce používať objekty z toho súboru, ktorý includuje ten v ktorom chce používať tie objekty, či ich položky..
no neviem, ono to nejde, aby includnutý súbor používal triedy a objekty ktoré sú v súbore ktorý ho includuje? Surprised .. možno som len zle pochopil.. to to ráno Confused
ja som to pochopil tak isto .. a preco by nesli pouzit staticke atributy?
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
final
Light Star
Light Star


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 04.12.2005
Príspevky: 206
Bydlisko: Prievidza
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 13:01    Predmet: Odpovedať s citátom  

ok, sorry, horšie som to asi nemohol napísať Embarassed

carnaby, ten autoload mi ja na nič, ale inak zaujímavá vec..
a ten hinting, mne to pekne nepríde, 8 inštancií takto tlačiť do toho objektu... hm.. a ten ob_* tam mám, lebo je to template to, čo sa includuje a následne ešte priraďujem obsah na určité časti tej predlohy.. ale dííík za snahu Smile

ale k tomu vysvetleniu..

[subor:1]

Kód:

<?
$x =  new nejakaTrieda;
$x->blabla = 10;

class includeTrieda
{
public function __construct($subor)
 {
 if(!@include_once($subor))
  {
  ..debug..
  }
 }
}

new includeTrieda('subor:2');
?>

[subor:2]

Kód:

<?=$x->blabla;?>

= čiže by som chcel aby sa zobrazilo 10, bez hintingu a s tým, že by include_once ostalo v triede.. (samozrejme keď ho dám mimo triedy, išlo by to)

problémom sa to nedá nazvať, ja len skôr dúfam, že existuje pri triedach niečo ako pri funkciách (global), akurát už v nejakom lepšiom štádiu..
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
Nosferatu
Medium Expert
Medium Expert



Stav: Odhlásený
Založený: 24.05.2005
Príspevky: 129

Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 13:11    Predmet: Odpovedať s citátom  

Cez globálne polia by to šlo takto.. tiež som mal podobný problém a keďže sa mi to necelo riešiť spravil som to takto.. ale neni to najlepší spôsob, ale funguje
Citácia:

<?
$GLOBALS["x"] = new nejakaTrieda;
$GLOBALS["x"]->blabla = 10;

class includeTrieda
{
public function __construct($subor)
{
if(!@include_once($subor))
{
..debug..
}
}
}

new includeTrieda('subor:2');
?>


Citácia:

<?=$GLOBALS["x"]->blabla;?>


a tamtá trieda by mohla fungovať nejak takto aj.. a potom nemáš problém s tým druhým súborom..
Kód:

class includeTrieda
{
 public function __construct($subor)
 {
  if(!subor)
  {
  ..debug..
  }
 }
}

new includeTriedy(@include_once('subor:2'));
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
final
Light Star
Light Star


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 04.12.2005
Príspevky: 206
Bydlisko: Prievidza
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 13:19    Predmet: Odpovedať s citátom  

no to už je lepšie Smile počkám ešte na ostatných ak niečo majú, ak nie tak to použijem.. dík (karma+)

// edit: ehm, k tej triede, ono to je trochu inak navrhnuté, ide to cez pár tried
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
gwixt
Addict
Addict


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 24.09.2005
Príspevky: 3408
Bydlisko: Trash-Can
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 13:20    Predmet: Odpovedať s citátom  

hmm ja tam ziadny type hinting nevidim Confused

a nemozes dat tu $x do tej includeTriedy?
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
Nosferatu
Medium Expert
Medium Expert



Stav: Odhlásený
Založený: 24.05.2005
Príspevky: 129

Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 13:23    Predmet: Odpovedať s citátom  

rád som pomohol Smile ..

no ja by som to $x nepchal do tej triedy, lepšie by asi bolo to druhé čo som napísal, tj. vyhodiť include von z triedy a debugovať len návratovú hodnotu includu (tj. false pri zlyhaní) vtedy sa trieda natiahne priamo na úroveň ostatných a nie do tej jednej, čo som predtým aj ja robil a zistil som že to neni moc dobré.. začal som používať globálne polia, ale to v OOP nemá čo robiť..
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
gwixt
Addict
Addict


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 24.09.2005
Príspevky: 3408
Bydlisko: Trash-Can
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 13:27    Predmet: Odpovedať s citátom  

Nosferatu napísal:
rád som pomohol Smile ..

no ja by som to $x nepchal do tej triedy, lepšie by asi bolo to druhé čo som napísal, tj. vyhodiť include von z triedy a debugovať len návratovú hodnotu includu (tj. false pri zlyhaní) vtedy sa trieda natiahne priamo na úroveň ostatných a nie do tej jednej, čo som predtým aj ja robil a zistil som že to neni moc dobré.. začal som používať globálne polia, ale to v OOP nemá čo robiť..
v OOP nema co robit ani samostatna premenna mimo triedy Smile
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
carnaby
Amateur
Amateur



Stav: Odhlásený
Založený: 23.08.2005
Príspevky: 24
Bydlisko: Martin
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 17:47    Predmet: Odpovedať s citátom  

chapem ako nechapem preco...

rozumiem vsetkemu no nerozumiem aky benefit stoho ma byt. OOP za kazdu cenu ? naco vytvarat instanciu triedy ked tam prebehne akurat konstruktor mozno par volani nejaky log a instancia zanika ??? to uz radsej staticka trieda pripadne triedy s vlastnym factory pripadne instancie singleton ci manager instancii.
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
IgiPoP
Medium Star
Medium Star


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 12.09.2005
Príspevky: 448
Bydlisko: MT
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 08 Nov 2006, 17:55    Predmet: Odpovedať s citátom  

ja osobne by som to riesil sposobom, kedy sa vyuziva prostredny (sprostredkovatelsky) objekt

[class.nejakaTrieda.php]
Kód:
<?
class nejakaTrieda
{
  public $blabla;
 
  public function __construct()
  {
  }

}
?>

[class.Trieda.php]
Kód:
<?php
require_once "class.nejakaTrieda.php";
class Trieda
{
  static private $_instance;
 
  public function __construct()
  {
  }

  public static function &Create($return=true)
  {
    if (!isset(self::$_instance))
    {
      self::$_instance = new nejakaTrieda();
    }
    if( $return )
    return self::$_instance;
  }

  static public function get($name)
  {
    if( !isset(self::$_instance) )
      self::Create(false);
    $arr = get_object_vars(self::$_instance);
    if( array_key_exists($name, $arr) )
    {
        return self::$_instance->$name;
    }
    else
      return "co vlastne chces????";
  }

}
?>

[index.php]
Kód:
<?php
require_once "class.Trieda.php";

class includeTrieda
{
public function __construct($subor)
 {
 if( file_exists($subor) )
  {
    ob_start();
      include_once($subor);
    $output = ob_get_contents();
    ob_end_clean();
    echo $output;
  }
 }
}

$x = Trieda::Create();
$x->blabla = 10;

new includeTrieda('subor.php');
?>

[subor.php]
Kód:
<?=Trieda::get("blabla"); ?>
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
Zobraziť príspevky z predchádzajúcich:    Časy uvádzané v GMT + 1 hodina
Odoslať novú tému   Odpovedať na tému    Obsah fóra www.hojko.com -> Programovanie
Strana 1 z 1

 
Prejdi na:  
Nemôžete odosielať nové témy do tohto fóra
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre
Nemôžete hlasovať v tomto fóre
Nemôžete pripájať súbory do tohto fóra
Môžete sťahovať súbory v tomto fóre


Powered by phpBB © 2005 phpBB Group, phpBB SEO, © Hojko 2004-2008

[ Vygenerované za: 0.2s ] :: [ 16 Queries ] :: [ 11,778 stránok za dnes ] :: [ Dnes DB: 199,782 ] :: [ Max DB: 2,334,336 Queries ]