ugrás a tartalomhoz

Dinamikus objektumok autocompletion-ja?

TeeCee · 2007. Már. 7. (Sze), 12.42
Üdv!

Lehet, hogy olyat keresek, ami nem létezik....
Van egy szép nagy, modulos felépítésű portálmotorom, amiben az objektumok dinamikusan jönnek létre, szépen, mindig amelyikre szükség van. Vannak olyan objektumok, amelyekhez értelem szerűen elég sokat nyúlok, és zavar, hogy nem tudom elérni a metódusait az IDE auto-kiegészítésével :(

Nem találkoztam ilyen 'object mapping' vagy hasonlóval egyetlen IDE alatt sem. Létezik? Eddig általam használt PHP-re (is) alkalmas szerkesztők: MC :D, UltraEdit :), Zend, phpED, Komodo.

Egy példa, hogy mit is szeretnék:
Van pl. a $GLOBALS['dblayer'] objektumom, aminek van egy execute metódusa.
Persze ezt be kell gépelni: $GLOBALS['dblayer']->execute('XXX'); (persze van 4* hosszabb metódusnév is, amit könyebben elfelejtek, ha egy darabig nem nyúlok ahhoz a modulhoz, megaztán könnyű elírni bármit...)

Milyen szép is lenne, ha:
1.) A "$GLO"-t beírva a modulok objektumai megjelennének (kiválaszt, ENTER)
2.) Utána a "->"-t írva megjelennének a metódusai, és esetleg a paraméterei (a paramétereket általában nem szoktam közvetlen használni, ezért ezt tudom mellőzni)

Megjegyezném (hangsúlyoznám), hogy mivel a fájlokat is dinamikusan tölti be a rendszer, ezért természetesen, amikor egy PHPfájlban módosítok, akkor egy darab include/require nincs benne a rendszer objektumaira vonatkozóan, és akkor még a dinamikus névből előállított példányosításról nem is beszéltem...

  // Csöppnyi ízelítő, miről is beszéltem
require_once(DIR.'mod_'.$name.'/classes/'.$name.'.php');
$this->modules[$name] = new $name;
$GLOBALS[$name] = &$this->modules[$name];
  // Igaz, itt a portal objektumon belül a moduloknál lesz a modul példánya,
  // de kényelmi/értelmi okok miatt a $GLOBALS alá is berakok egy referenciát...
Gondoltam egy olyanra, hogy a fejlesztői verzióban egy include lenne minden
oldal elején, és ott minden fájlt behúzna és objektumokat példányosítana...
Persze ez elég rossz ötlet, lassítana mindent kivéve a fejlesztést, már ha működik, mert még nem próbáltam.

Úgy hiszem, erre nincs megoldás, de hátha csak pesszimistább vagyok, mint kellene...

Várom a válaszokat, előre is köszönöm:
TeeCee, alias Szügyi Tamás :o)
 
1

phpeclipse

sayusi · 2007. Már. 7. (Sze), 19.19
Esetleg phpeclipse? Nekem sokkal kényelmesebb, mint a Zend Studio és a Zend IDE Eclipse alá.
2

Jövő látó, vagy gondolat olvasó programot szeretnél?

pp · 2007. Már. 7. (Sze), 20.18
A program írása közben még csak a Te fejledben van meg, hogy a $GLOBAL tömbben milyen változók lesznek, hisz tudod, hogy majd valaki létrehozza. Ezek a változók futás közben jönnek létre, ráadásul a típusuk is akkor derül ki. Gondolj bele egy adatbázis réteg a megnyitás során vissza adhat egy adatbázis objektumot, vagy egy hiba objektumot is, jelezvén, hogy hiba történt. Tehát futás közben ugyan az a változó név különböző típusokat takarhat.

Ami megoldás lehet, egy olyan program, ami kigyűjti az összes tagfüggvényt és tagváltozót és ezeket mind felajánlja neked. (Ilyen nem tudom van-e, de mintha az eclipse tudna valami hasonlót)

pp
3

Csak a gondolatolvasás jöhet szóba!

TeeCee · 2007. Már. 8. (Cs), 18.10
Én felhoztam egy lehetséges megoldás - és nem a work-aroundra gondoltam (amit még mindig nem tudok, hogy egyáltalán működik-e, mert mé gnem volt időm kipróbálni, de ma este tutire megteszem). Én csak szerényen object mappingnak neveztem el (az a legjobb, hogy ha az ember egy ilyen funkciót keres, akkor azt se tudja, hogy milyen néven, milyen kulcsszavakkal keresse).
Tudom én, hogy nem tudja az IDE kitalálni, hogy mit szeretnék. phpEd alatt van directory mapping, ha pl. közvetlen SFTP-vel akarom egy szerverre felrakni a helyileg is mosított fájl(oka)t. Na így pl. meg lehetne adni, hogy én biztosan a $GLOBALS['dblayer']-t $dblayer -nek szeretném használni. Azért a változók nagy részéről tudom, hogy milyen objektum :)

HAHÓ! Mindenki, aki még nem írt compo-t a web.conf-ra! Ilyet csináljon nekem :D

Tudom, mindenki a saját logikája szerint építi fel programjait, de nem hinném, hogy én vagyok az egyetlen, aki dinamikusan hozna létre objektumokat. Mindenki mindig mindent bepötyög?

Köszi PP a választ, úgy hiszem erre úgyis csak a haladóbbak fognak reagálni a kérdés bonyolultsága miatt.
Sajnos tisztában voltam azzal, amit mondtál - persze lehet, hogy nem voltam eléggé érthető a kérdés feltevésekor!

Köszönöm mégegyszer, várom a Többieket, akik még hozzá(m) tudnak tenni valamit!
(és örülünk, hogy megcsináltátok a weblabort...)
4

Baj...

janoszen · 2007. Már. 9. (P), 00.40
A baj ott van, hogy ha egy fejlesztőkörnyezet ilyet tudna, akkor már Te nem kellenél eléje. Egy objektum tetszőleges úton belekerülhetett a GLOBALS tömbbe, szóval ha egy program le tudná elemezni az összes futási lehetőséget, akkor bizony ismerné a programo logikáját és akkor bizony nem kéne elé a programozó. Persze olyan hackelés biztos van, hogy futás közben megállítja és éppen akkor mi van benne, de azért...

Egyébként ha OOP-t használsz, akkor nem kellene szép lassan leszokni a GLOBALS használatáról? Az OOPnek pont az lenne a lényege, hogy amit nem kell, azt ne lásd, és egyéb, iskolákban tanult paradigmák...

Szóval sok sikert, ha találsz, oszd meg velünk.

(Tényleg, mi volt vele, nap közben kaptam egy forbidden errort, eléggé meghökkentem...)
6

köszi...

TeeCee · 2007. Már. 9. (P), 13.10
Szabolcs! Köszi, megnézem akkor az Eclipse-t, bár amikor (egy-másfél éve kipróbáltam, akkor nem tetszett valamiért)

proclub:
Biztosan én magyaráztam félre valamit, ha Te sem érted :)
Én nem azt szeretném, hogy a program kitalálja, hogy a GLOBALS['dblayer'], avgy a $dblayer milyen objektum. Én azt szeretném, hogyha MEGMONDHATNÁM az IDEnek, hogy ezek a változók milyen objektumok lesznek. (Ez neveztem én el látatlanban object mapping-nek, persze lehet, hogy van ilye ficsör és az mást takar, de nekem ez tűnt logikusnak - esetleg még variable mapping) Ekkor, az IDE már tudja, hogy melyik válto milyen objektum és akkor a metódusait, is fel tudná kínálni...

Ami az OOP-t illeti: VALÓBAN, hadilábon állok vele. Mivel a programozás nagy részét még az OOP-s szemlélet előtt (illetve azt mellőzve) kezdtem el elsajátítani, ráadásul autodidakta módon, ezért szeretem inkább funcionálisan elhatárolni az objektumaimat. Mindjárt írok is egy e-mailt, amiben megkérdezlek, Te hogyan oldanád meg máshogy a modulok elérését 'szebben'...

Köszi!
5

Eclipse

Sulik Szabolcs · 2007. Már. 9. (P), 10.37
Az Eclipse tudja azt, ami neked kell, ha nem is úgy, ahogy te gondoltad.

Szóval a phpeclipse megcsinálja neked azt, hogy a létrehozott projectek alatt használt összes (tag)függvényt eltárolja és szerkesztésnél a kódkiegészítő felajánlja neked (mindenféle válogatás nélkül az összeset).

pl: $GLOBALS['blabla']-t mindenképpen be kell írnod, de utána már működik.