[ _korso_ @ 13.06.2007. 17:51 ] @
Kako da za neki objekat
Code:
$obj = new Test() 

saznam fizicku lokaciju fajla u kome se nalazi ta Test klasa (fajl u kome je deklarisana), koja je tip objekta $obj.
Trazio sam po manual-u, ali mislim da nema takve funkcije ili mozda gresim...

Naravno skript u kome se pravi ovaj objekat je razliciti od skripta u kome se nalazi Test klasa.


[ bzero @ 13.06.2007. 18:15 ] @
Prvo sto meni pada na pamet je da u klasu test stavis neki ovakav metod:
Code:

class Test {
    
    function filename() {
        return __FILE__;
    }
}


pa onda mozes to da koristis kada ti je potrebno:
Code:

$obj = new Test();
print $obj->filename();


[ _korso_ @ 13.06.2007. 22:29 ] @
Slazem se sa tobom, ali problem je upravo sto ja ne mogu da menjam klasu Test. Ona je takva
kakva je...
[ Miroslav Ćurčić @ 13.06.2007. 23:02 ] @
Nasledi originalnu klasu i dodaj joj tu funkciju.
Nadam se da možeš da tu novu klasu dopišeš u istu datoteku.
Code:

class MojTest extends Test {
    function filename() {
        return __FILE__;
    }
}
[ afwt @ 14.06.2007. 02:19 ] @
hmmmm..... pa posto se bojim da sam te razumeo.... ako se sme znati, za sta ti tacno to treba? Sve mi mirise da hoces da 'aknes neki enkodiranu aplikaciju... Je l' to? :-)
[ _korso_ @ 14.06.2007. 08:06 ] @
Ne mogu ni da je nasledim (tj. realno mogu, ali u tom slucaju bi morao da nasledim jos 100 i vise klasa),
a to mi nije bas cilj :) Resenje mora da bude univerzalno (bez obzira na metode i propertie-e koje ima
klasa TEST ili njoj neka slicna).
Inace ovo mi treba za neki backtrace.
[ mika @ 14.06.2007. 08:53 ] @
Mozes i sa statickim funkcijama da probas, koristeci nasledjivanje:

Code:

class testKlasa extends originalnaKlasa {
    static function getFilename() {
        return __FILE__;
    }
}


i onda gledas koji je fajl sa:
Code:

echo testKlasa::getFilename();


Ja bih to tako radio.


EDIT: staticka funkcija je dodata da bi se izbeglo instanciranje klase.
[ _korso_ @ 14.06.2007. 08:59 ] @
Ali ako dobro vidim to je isto sto je napisao i mVeliki samo bez static funkcije
[ mika @ 14.06.2007. 09:20 ] @
Tacno tako, s tom razlikom sto se izbegava instanciranje klase, a to je prakticnije-za ovu situaciju.

Ne vidim drugi nacin kako bi to odradio.
[ _korso_ @ 14.06.2007. 09:37 ] @
Ok, naravno...
Ne vidim ni ja trenutno nacin da ovo resim :)
Bar ne na prvi pogled...
Mada verujem da je nekako moguce.


[ Miroslav Ćurčić @ 14.06.2007. 10:39 ] @
A da uradiš ovo:
originalne datoteke rename-uješ dodajući im recimo "_orig" u nastavku,
kreiraš nove datoteke u originalnom imenu a u njima u neki globalni array prijaviš sve klase ova druga sadrži i posle include-uješ originale.

Moglo bi i automatski, recimo sa get_declared_classes na početku dobiješ listu postojećih klasa, zatim include pa opet pozoveš get_declared_classes pa sa array_diff pronađi šta je novo stiglo pa to prijavi u globalni array.

Naravno taj array treba da ima index po imenu same klase a vrednost je path.
[ _korso_ @ 15.06.2007. 08:14 ] @
Ok, hvala...
Probacu
[ Miroslav Ćurčić @ 22.06.2007. 21:11 ] @
Eh, sad se setih,
PHP od verzije 4.3 ima funkciju debug_backtrace(); koja ti vraća detaljno kroz koje si sve funkcije (možda i klase) ušao u trenutku njenog poziva, isprobaj.