|
|
|
| Autor |
Správa |
final Light Star


Pohlavie:  Stav:  Založený: 04.12.2005 Príspevky: 206 Bydlisko: Prievidza Karma: 
|
Zaslal: 07 Nov 2006, 23:49 Predmet: php5, include_once |
|
|
č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 |
|
 |
carnaby Amateur

Stav:  Založený: 23.08.2005 Príspevky: 24 Bydlisko: Martin Karma: 
|
Zaslal: 08 Nov 2006, 8:26 Predmet: |
|
|
asi je to tou rannou hodinou ale vobec som ta nepochopil 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  |
|
| Návrat hore |
|
 |
gwixt Addict


Pohlavie:  Stav:  Založený: 24.09.2005 Príspevky: 3408 Bydlisko: Trash-Can Karma: 
|
Zaslal: 08 Nov 2006, 9:36 Predmet: |
|
|
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 |
|
 |
Nosferatu Medium Expert

Stav:  Založený: 24.05.2005 Príspevky: 129
Karma: 
|
Zaslal: 08 Nov 2006, 10:57 Predmet: |
|
|
..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? .. možno som len zle pochopil.. to to ráno  |
|
| Návrat hore |
|
 |
gwixt Addict


Pohlavie:  Stav:  Založený: 24.09.2005 Príspevky: 3408 Bydlisko: Trash-Can Karma: 
|
Zaslal: 08 Nov 2006, 11:25 Predmet: |
|
|
| 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? .. možno som len zle pochopil.. to to ráno  |
ja som to pochopil tak isto .. a preco by nesli pouzit staticke atributy? |
|
| Návrat hore |
|
 |
final Light Star


Pohlavie:  Stav:  Založený: 04.12.2005 Príspevky: 206 Bydlisko: Prievidza Karma: 
|
Zaslal: 08 Nov 2006, 13:01 Predmet: |
|
|
ok, sorry, horšie som to asi nemohol napísať
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
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]
= č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 |
|
 |
Nosferatu Medium Expert

Stav:  Založený: 24.05.2005 Príspevky: 129
Karma: 
|
Zaslal: 08 Nov 2006, 13:11 Predmet: |
|
|
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 |
|
 |
final Light Star


Pohlavie:  Stav:  Založený: 04.12.2005 Príspevky: 206 Bydlisko: Prievidza Karma: 
|
Zaslal: 08 Nov 2006, 13:19 Predmet: |
|
|
no to už je lepšie 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 |
|
 |
gwixt Addict


Pohlavie:  Stav:  Založený: 24.09.2005 Príspevky: 3408 Bydlisko: Trash-Can Karma: 
|
Zaslal: 08 Nov 2006, 13:20 Predmet: |
|
|
hmm ja tam ziadny type hinting nevidim
a nemozes dat tu $x do tej includeTriedy? |
|
| Návrat hore |
|
 |
Nosferatu Medium Expert

Stav:  Založený: 24.05.2005 Príspevky: 129
Karma: 
|
Zaslal: 08 Nov 2006, 13:23 Predmet: |
|
|
rád som pomohol ..
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 |
|
 |
gwixt Addict


Pohlavie:  Stav:  Založený: 24.09.2005 Príspevky: 3408 Bydlisko: Trash-Can Karma: 
|
Zaslal: 08 Nov 2006, 13:27 Predmet: |
|
|
| Nosferatu napísal: |
rád som pomohol ..
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  |
|
| Návrat hore |
|
 |
carnaby Amateur

Stav:  Založený: 23.08.2005 Príspevky: 24 Bydlisko: Martin Karma: 
|
Zaslal: 08 Nov 2006, 17:47 Predmet: |
|
|
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 |
|
 |
IgiPoP Medium Star


Pohlavie:  Stav:  Založený: 12.09.2005 Príspevky: 448 Bydlisko: MT Karma: 
|
Zaslal: 08 Nov 2006, 17:55 Predmet: |
|
|
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 |
|
 |
|
|  |
|
|
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 ]
|